不要想着骚操作。基本参考维基教科书:CMake入门。然而因为这个教科书已经停止更新了,所以参考CMake官方网站的教程CMake Tutorial。
最简单的编译一个源文件的CMakeLists.txt
天才第一步,“Hello world”。写一个输出hello world的main.cc
(这里用的是谷歌代码规范的命名规则)。然后同目录放一个包含以下内容的CMakeLists.txt:
1 | # 指示要求的cmake最低版本 |
1 | ./ |
warning
在这个目录下 cmake .
,cmake就会输出一个包含makefile的build文件夹,在build文件夹里make,就会输出可执行文件helloworld。这种叫做In-source build(虽然实际上已经有点out-source的感觉了)。
不建议直接 cmake .
,这样会导致与源代码无关的编译文件污染源代码目录。无论什么时候都应该新建目录用于编译。
Out-Source Build
为了不污染源代码,应该新建build目录再编译。
1 | ./ |
1 | cd build |
这样就把cmake生成的编译文件和源代码分开了。启动编译就是在build目录里执行cmake --build .
。
Cmake Cannot determine link language for target
note
或许只是因为某个library只有头文件,没有cpp,所以cmake不知道到底是什么语言。然而实际上就算手动设置link language,由于不是把这个library设置为interface library(或者什么其他东西),所以linker一样不会生成lib,导致链接失败。摸鱼的解决办法:新建一个空的cpp文件,就只有一行,#include
这个头文件,就完事了。
总的来说是因为编译单元的问题,解决办法就是为每个header都创建对应的source文件(.c
或.cpp
),然后在source文件中#include
header。