CMake实践指南:从简单程序到库的构建

4星 · 超过85%的资源 需积分: 44 411 下载量 47 浏览量 更新于2024-07-19 9 收藏 476KB PDF 举报
"CMake从入门到精通.pdf" CMake是一种跨平台的构建系统,用于管理软件构建过程,尤其适用于多语言项目。它通过CMakeLists.txt文件来配置构建指令,使得开发者能够在不同操作系统和编译器之间轻松切换。这份资料详细介绍了CMake的使用,适合初学者学习和实践。 在CMake中,`project`命令是项目的起点,它不仅定义了项目名称(在本例中是HELLO),还会设置一些默认变量,如HELLO_BINARY_DIR和HELLO_SOURCE_DIR,它们分别表示构建输出目录和源代码目录。对应的全局变量PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR也有同样的含义,对于out-of-source构建,理解这些变量的区别至关重要。 `set`命令用于定义和赋值变量,例如设置`SRC_LIST`为`main.c`,这样做的目的是在后续的`add_executable`命令中指定源文件。`add_executable`是CMake中创建可执行文件的关键命令,它接受项目名称(hello)和源文件列表(${SRC_LIST})作为参数,告诉CMake如何构建这个程序。 构建过程通常在源代码目录之外的构建目录(如build)中进行,这样可以保持源代码的整洁,避免生成的中间文件和编译结果混在一起。通过在构建目录中运行`cmake`,可以生成针对特定编译器的Makefile或构建文件,接着使用`nmake`(Windows上的NMake)或`make`(Unix-like系统)来实际执行构建。 例子逐渐增加了复杂性,从单个源文件到多个文件,再到生成静态库、处理不同目录的源文件、控制输出位置以及使用动态库。这些例子展示了CMake处理项目结构变化的灵活性。 例子二中,当项目包含多个源文件时,`add_executable`依然适用,只需将所有源文件添加到`SRC_LIST`。如果需要创建库(如静态库),可以使用`add_library`命令,例如: ```cmake add_library(mylib STATIC ${LIB_SRC_LIST}) ``` 例子三展示了如何链接库到可执行文件: ```cmake target_link_libraries(hello mylib) ``` 例子四和五涉及目录结构,CMake允许通过相对路径引用不同目录下的文件,并通过设置`CMAKE_RUNTIME_OUTPUT_DIRECTORY`等变量来改变生成文件的位置。 例子六涉及使用动态库,通过修改`target_link_libraries`中的库类型,可以链接到共享库(动态库)而不是静态库。 CMake的学习曲线可能较为陡峭,因为它的语法和命令需要时间去熟悉。然而,一旦掌握了基本概念,就能利用CMake的强大功能管理复杂的项目构建。实践中,不断练习和查阅文档是掌握CMake的关键,因为每个项目可能有独特的构建需求。