[TOC] ### cmake 生成release pdb的指令 ***** 在cmakelist 文件中使用 ``` set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") ``` ### Debug 版本 ***** 参数 含义 ``` /MDd /MLd 或 /MTd 使用 Debug runtime library (调试版本的运行时刻函数库) /Od 关闭优化开关 /D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关 (主要针对assert函数) /ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译 /GZ 可以帮助捕获内存错误 /Gm 打开最小化重链接开关, 减少链接时间 ``` ### Release 版本 ***** 参数 含义 ``` /MD /ML 或 /MT 使用发布版本的运行时刻函数库 /O1 或 /O2 优化开关,使程序最小或最快 /D "NDEBUG" 关闭条件编译调试代码开关 (即不编译assert函数) /GF 合并重复的字符串, 并将字符串常量放到只读内存, 防止被修改 ``` ### 编译一个需要第三方库的项目 ***** #### 链接头文件目录 **INCLUDE_DIRECTORIES**,它相当于 g++ 选项中的 -I 参数的作用,也相当于环境变量中增加路径到 CPLUS_INCLUDE_PATH 变量的作用: ``` include_directories(../../../thirdparty/comm/include) ``` #### 链接库目录 **LINK_DIRECTORIES**, **它相当于 g++ 命令的 -L 选项的作用**,也相当于环境变量中增加 LD_LIBRARY_PATH 的路径的作用 ``` link_directories("/home/server/third/lib") ``` #### 链接库 **LINK\_LIBRARIES(库名称即可)** ` ` #### **宏定义** [CMakeLists.txt 之 多重判断宏定义](http://blog.csdn.net/u012816621/article/details/52605427) 比如设置为 CPU_ONLY ``` add_definitions(-DCPU_ONLY) ``` #### 添加子文件夹 使用 **add_subdirectory** ``` add_subdirectory(Foundation_Classes) add_subdirectory(Behavioral_Patterns) add_subdirectory(Creational_Patterns) add_subdirectory(Structural_Patterns) ``` ### CMake添加[忽略特定默认库] ***** SET(CMAKE_EXE_LINKER_FLAGS /NODEFAULTLIB:"libxxx1.lib;libxxx2.lib;[...]") ### CMake指定C/C++版本 ***** 在CMakeLists.txt文件中b包含: ``` add_compile_options(-std=c++0x) #CMake 2.8.12 or newer ``` 或者 ``` add_definitions(-std=c++0x) #CMake 2.8.11 or older ``` ` ` 在CMake 3.1及更高版本中设置C ++标准的正确方法是: ``` set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED on) ``` 也可以为一个目标指定标准: ``` set_property(TARGET mylib PROPERTY CXX_STANDARD 11) ``` ` ` 从CMake 3.3开始,您还可以使用奇怪的生成器表达式语法将此标志仅应用于特定语言(例如,仅C或C ++): ``` add_compile_options($:-std=c++14> $:-std=c99>) ``` ` ` 自CMake 3.8起,target\_compile\_features命令有一个新选项,可用于设置目标的所需标准: ``` target_compile_features(mylib PUBLIC cxx_std_11) ```