差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
public:it:cmake [2020/11/09 16:00] – oakfire | public:it:cmake [2024/09/03 14:06] (当前版本) – [CMake] oakfire | ||
---|---|---|---|
行 2: | 行 2: | ||
* Official Site: | * Official Site: | ||
* c++跨平台构建工具, | * c++跨平台构建工具, | ||
+ | * CMake [[https:// | ||
+ | * CMake 变量的作用域:[[https:// | ||
+ | * 父目录里的绑定变量默认会传到子目录的CMakefile作为初始值 | ||
+ | * find_package 默认支持的列表:'' | ||
===== Tips ===== | ===== Tips ===== | ||
* MSVC中, cmake 默认生成的 release 工程不生成 pdb 文件,可如下添加< | * MSVC中, cmake 默认生成的 release 工程不生成 pdb 文件,可如下添加< | ||
行 24: | 行 27: | ||
) | ) | ||
</ | </ | ||
- | * 给dll右键属性的详细信息里添加git version< | + | * 给dll右键属性的详细信息里添加git version, 参考[[https:// |
add_definitions(-DMAIN_PROJECT_NAME=\" | add_definitions(-DMAIN_PROJECT_NAME=\" | ||
find_package(Git QUIET) | find_package(Git QUIET) | ||
行 112: | 行 115: | ||
ENDFOREACH() | ENDFOREACH() | ||
</ | </ | ||
+ | * 在 bat 批处理里面,如果cmake命令行报错,参考[[https:// | ||
+ | cmake . | ||
+ | if errorlevel 1 exit /B | ||
+ | </ | ||
+ | * 屏蔽VC编译 release 时的具体某个 warning,比如c4566, | ||
+ | add_compile_options(" | ||
+ | </ | ||
+ | * cmake 不支持静态库的 dependence, 本质上,静态库只有二进制的合并,没有 link, 只有MSVC可以加 静态库的dependence然后生成合并后的lib, | ||
+ | add_library(a STATIC | ||
+ | # target_link_libraries(a b) # 这是不起作用的,因为 a 是静态库,没有link | ||
+ | add_library(ab INTERFACE) # 增加一个 ab, INTERFACE | ||
+ | target_link_libraries(ab INTERFACE a b) | ||
+ | add_executable(c ...) | ||
+ | target_link_libraries(c ab) # 此时 c 工程就包含了a.lib, | ||
+ | </ | ||
+ | * [[https:// | ||
+ | * 如果源文件包含该第三方头文件,但头文件中不包含该第三方头文件,采用 PRIVATE; | ||
+ | * 如果源文件和头文件中都包含该第三方头文件,采用 PUBLIC; | ||
+ | * 如果头文件中包含该第三方头文件,但源文件中不包含,采用 INTERFACE。 | ||
+ |