@lniwn
2017-11-22T03:36:34.000000Z
字数 2269
阅读 1652
C++ CMake
编写CMakeLists.txt
# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)# 项目信息project (Demo1)# 指定生成目标add_executable(Demo main.cc)
add_executable可执行文件add_library 静态库aux_source_directory(<dir> <variable>)
# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)# 项目信息project (Demo2)# 查找当前目录下的所有源文件# 并将名称保存到 DIR_SRCS 变量aux_source_directory(. DIR_SRCS)# 指定生成目标add_executable(Demo ${DIR_SRCS})
这样,CMake 会将当前目录所有源文件的文件名赋值给变量DIR_SRCS,再指示变量DIR_SRCS 中的源文件需要编译成一个名称为 Demo 的可执行文件。
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL]) source_dir子文件夹路径 binary_dir 输出路径 EXCLUDE_FROM_ALL 从Build All项目中排除
ZERO_CHECK will rerun cmake. You can/should execute this after changing something on your CMake files.
ALL_BUILD is simply a target which builds all and everything project in the active solution, I guess one can compare it to "make all".
可以通过set(CMAKE_SUPPRESS_REGENERATION true)不生成ZERO_CHECK工程。
target_link_libraries指明链接库 target_link_libraries(<target> [lib1 [lib2 [...]]] [[debug|optimized|general] <lib>] ...) general可选字段,表示所有模式都链接的库 debug表示debug模式才链接的库 optimized表示非debug模式才链接的库
target_link_libraries(${PROJECT_NAME}delayimp.lib libcef.libdebug cef_module_d.libdebug libcef_dll_wrapper_d.liboptimized cef_module.liboptimized libcef_dll_wrapper.lib)
# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)# 项目信息project (Demo4)# 加入一个配置头文件,用于处理 CMake 对源码的设置configure_file ("${PROJECT_SOURCE_DIR}/config.h.in""${PROJECT_BINARY_DIR}/config.h")# 是否使用自己的 MathFunctions 库option (USE_MYMATH"Use provided math implementation" ON)# 是否加入 MathFunctions 库if (USE_MYMATH)include_directories ("${PROJECT_SOURCE_DIR}/math")add_subdirectory (math)set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)endif (USE_MYMATH)# 查找当前目录下的所有源文件# 并将名称保存到 DIR_SRCS 变量aux_source_directory(. DIR_SRCS)# 指定生成目标add_executable(Demo ${DIR_SRCS})target_link_libraries (Demo ${EXTRA_LIBS})
编写config.h.in文件
#cmakedefine USE_MYMATH
set(CMAKE_BUILD_TYPE "Debug")set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
check_function_exists 命令测试链接器是否能够在链接阶段找到 pow 函数。
# 检查系统是否支持 pow 函数include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)check_function_exists (pow HAVE_POW)