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