CMake
CMake 跨平台项目管理
常见问题
1. 文件编码
- 文件编码是UTF-8,在Windows控制台默认GBK的代码页输出会出现乱码,故需要在main函数最开始位置加入启用Windows控制台UTF-8代码页的命令,即:
1 |
|
- 由于在Windows上编译成VS工程文件时可能会出现字符集的问题,故在顶层CMakeLists.txt中加入了用MSVC编译时的一些选项,即:
1 | # MSVC设置 |
- 默认用UTF-8,LF写代码
2. 如何添加第三方库?
在CMake中添加第三方库有两种方式:手动添加和使用自动化工具。
手动添加:
假设我们需要添加一个名为"libfoo"的库,它包含头文件和库文件,那么可以按照以下步骤进行:
在CMakeLists.txt中添加库的路径:
1
2include_directories(${CMAKE_SOURCE_DIR}/include) # 头文件目录
link_directories(${CMAKE_SOURCE_DIR}/lib) # 库文件目录编写链接库的指令:
1
target_link_libraries(my_project libfoo)
使用自动化工具:
一些大型的第三方库会提供自己的CMake模块(cmake-modules),可以通过find_package
命令来寻找并导入这些模块,例如:
1 | find_package(OpenCV REQUIRED) |
3. 如何添加测试?
在CMake中,可以使用CTest框架来添加测试。CTest允许将测试代码与项目代码分开管理,测试可以被单独运行或作为构建过程的一部分运行。
以下是一个示例:
1 | enable_testing() |
这段代码启用了测试模块,然后定义了一个名为"test_foo"的测试,并将其链接到"libfoo"库文件。最后,使用add_test
命令将测试添加到测试套件中。
4. 如何进行交叉编译?
在CMake中,可以通过设置交叉编译器路径和系统名称来进行交叉编译,例如:
1 | set(CMAKE_SYSTEM_NAME Linux) |
需要指定正确的系统名称和交叉编译器路径,才能成功进行交叉编译。
5. 如何生成IDE工程文件?
CMake可以根据不同的IDE生成相应的工程文件,例如Visual Studio、Xcode和Qt Creator等。
以下是一些示例:
1 | # 生成Visual Studio项目文件 |
需要注意的是,不同的IDE支持的CMake版本可能有所不同,需要根据实际情况选择合适的CMake版本和IDE版本。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The Coding Odyssey | Chronicles of a Software Developer!