cmake技巧

1. 变量传递,同makefile,变量可由上至下传递,包括路径声明,不带target的link_libraries等;

顶层cmakelist

INCLUDE_DEREATORIES(${CMAKE_CURRENT_SOURCE_DIR}/inc)
ADD_SUBDIREATORY(xx)

底层xx目录的cmakelist已自动将上层的inc目录添加到了头文件路径;

2. 遍历:https://cmake.org/cmake/help/latest/command/foreach.html

SET(SRC_DIRS
    ${CMAKE_CURRENT_SOURCE_DIR}/aa
    ${CMAKE_CURRENT_SOURCE_DIR}/bb
    ${CMAKE_CURRENT_SOURCE_DIR}/cc    
)
FOREACH(dir ${SRC_DIRS})
    INCLUDE_DIREACTORIES(${dir}/inc)
    AUX_SOURCE_DIREACTORY(${dir} SRCS)
ENDFOREACH()

3. [多个]静态库转成动态库

99. 其他常用宏

ADD_DEFINATIONS(-DXXXX)
#libxxx.so
PROJECT(xxx) 
TARGET_LINK_LIBRARIES(${PROJECT_NAME}, PRIVATE "-Wl,--whole-archive" ${STATIC_LIBS} "-Wl,--no-whole-archive" INTERFACE -lpthread -ldl -lrt)
CMAKE_INSTALL_RPATH 用于指定make install生成的lib and exec files的runtime path(LD链接路经,多个rpath使用“:”分隔),同时INCLUDE_DIRECTORIES 声明的路径也会被添加到rpath(同gcc/ld -rpath,可通过:readelf -d file 查看rpath)
https://cmake.org/cmake/help/v3.14/variable/CMAKE_INSTALL_RPATH.html?highlight=rpath#variable:CMAKE_INSTALL_RPATH

CMAKE_BUILD_RPATH 同上,仅仅影响make生成的lib and exec files

CMAKE_SKIP_BUILD_RPATH 默认去除了make生成的lib and exec files的rpath
原文地址:https://www.cnblogs.com/zengjianrong/p/14480872.html