CMake-官方教程(2)-添加库-Adding a Library
Adding a Library
文章目录
- Adding a Library
- 创建库
- 选项控制是否链接库
创建库
指定源文件来构建库
add_library(MathFunctions mysqrt.cxx)
在上层CMakeLists.txt使用add_subdirectory
添加子目录来构建子模块,子目录中同样编写CMakeLists.txt来管理
为目标添加包含目录,其中${PROJECT_SOURCE_DIR}
表示当前CMakeLists.txt所在的目录,${PROJECT_BINARY_DIR}
表示cmake构建目录
target_include_directories(Tutorial PUBLIC
"${PROJECT_BINARY_DIR}"
"${PROJECT_SOURCE_DIR}/MathFunctions"
)
为目标添加链接的库
target_link_libraries(Tutorial PUBLIC MathFunctions)
选项控制是否链接库
- 添加选项
option(USE_MYMATH "Use tutorial provided math implementation" ON)
- CMakeLists中根据选项值执行相关指令
if (USE_MYMATH)
add_subdirectory(MathFunctions)
list(APPEND EXTRA_LIBS MathFunctions)
list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/MathFunctions")
endif()
list命令含义是添加MathFunctions到名字为EXTRA_LIBS的列表中,引用list的方式如下
target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})
target_include_directories(Tutorial PUBLIC
"${PROJECT_BINARY_DIR}"
${EXTRA_INCLUDES}
)
- 在TutorialConfig.h.in中添加
#cmakedefine USE_MYMATH
,当选项为ON则定义宏,OFF则不定义。注意configure命令应该在option命令之后,因为.in文件中使用到了option定义的USE_MATH变量,否则变量值不确定 - 在源文件中使用
#ifdef USE_MYMATH ... #else .. #endif
来控制头文件引入和调用函数 - 使用cmake命令时,控制USE_MYMATH的值
cmake ../Step2 -DUSE_MYMATH=OFF