Cmake 语法与实战入门
CMake 是码包一个跨平台、开源的码包构建系统,允许开发者编写一种平台无关的码包 CMakeList.txt 文件来定制整个编译流程,然后根据目标用户的码包平台生成所需的本地化 Makefile 和工程文件。在 Linux 平台下使用 CMake 生成 Makefile 并编译的码包代币空投网站源码流程如下:
在有些情况下,如果 CMakeLists.txt 文件中使用了一些高版本 cmake 特有的码包一些命令的时候,就需要加上这样一行,码包提醒用户升级到该版本之后再执行 cmake。码包
最好写上,码包它会引入两个变量 demo_BINARY_DIR 和 demo_SOURCE_DIR,码包同时,码包cmake 自动定义了两个等价的码包变量 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR。
add_library 默认生成是码包静态库,通过以上命令生成文件名字,码包在 Linux 下是:demo libcommon.a libcommon.so,在 Windows 下是:demo.exe common.lib common.dll。
搜索所有的cpp文件,可以使用 aux_source_directory(dir VAR) 发现一个目录下所有的swf网站源码源代码文件并将列表存储在一个变量中。
自定义搜索规则,可以使用 find_library(VAR name path)查找到指定的预编译库,并将它的路径存储在变量中。默认的搜索路径为 cmake 包含的系统库,因此如果是 NDK 的公共库只需要指定库的name 即可(不需path)。
类似的命令还有 find_file()、find_path()、find_program()、find_package()。在 Windows 下,系统会根据链接库目录,搜索xxx.lib 文件,Linux 下会搜索 xxx.so 或者 xxx.a 文件,如果都存在会优先链接动态库(so 后缀)。
指定全路径,或者指定链接多个库,使用 set 追加设置变量的值。例如,dnshell工具源码PROJECT_SOURCE_DIR、PROJECT_BINARY_DIR、PROJECT_NAME、CMAKE_CURRENT_SOURCE_DIR、CMAKE_CURRENT_BINARY_DIR、CMAKE_CURRENT_LIST_DIR、EXECUTABLE_OUTPUT_PATH、LIBRARY_OUTPUT_PATH。
实战单个源文件,假设现在我们的项目中只有一个源文件 main.cc,编写 CMakeLists.txt 文件并保存在与 mian.cc 源文件同个目录下。执行cmake .,得到 Makefile 后再使用make命令编译得到 Demo1 可执行文件。
多个源文件,将power函数单独写进一个名为MathFunctions.c的源文件里,修改 CMakeLists.txt 如下,使用 aux_source_directory命令查找所有源文件。这样写当然没什么问题,电子溯源码但是把所有源文件的名字都加进去将是一件烦人的工作。更省事的方法是使用该命令,CMake 会将当前目录所有源文件的文件名赋值给变量,再指示变量中的源文件需要编译成一个名称为 Demo 的可执行文件。
多个目录,多个源文件,将 MathFunctions.h 和 MathFunctions.cc文件移动到 math 目录下。在项目根目录和 math 目录里各编写一个 CMakeLists.txt 文件。在根目录的 CMakeLists.txt 文件中使用 add_subdirectory 指明本项目包含一个子目录 math,math 目录下的 CMakeLists.txt 文件和源代码也会被处理。在子目录中的 CMakeLists.txt 文件中使用 add_library 将 src 目录中的源文件编译为静态链接库。
自定义编译选项,允许为项目增加编译选项,如将 MathFunctions 库设为一个可选的库,根据 USE_MYMATH 的值选择是否使用该库。首先在顶层的 CMakeLists.txt 文件中添加该选项,修改 main.cc 文件,让其根据 USE_MYMATH 的c wcf源码预定义值来决定是否调用标准库还是 MathFunctions 库。编写 config.h.in 文件,CMake 会自动根据配置文件中的设置自动生成 config.h 文件。可以使用 ccmake 或者 cmake -i 命令进行交互式配置。
安装和测试,首先在 math/CMakeLists.txt 文件里添加安装路径配置,修改根目录的 CMakeLists 文件,指定安装目录。可以使用 CTest 测试工具添加测试用例,验证程序是否成功运行并得到正确结果。编写宏实现更多测试用例。让 CMake 支持 gdb 的设置也很容易,只需要指定 Debug 模式下开启-g 选项。
添加版本号,给项目添加版本号,便于用户了解维护情况和版本兼容性。修改顶层 CMakeLists 文件,指定主版本号和副版本号。在 config.h.in 文件中添加预定义变量,直接在代码中获取版本信息。
生成安装包,配置生成各种平台上的安装包,使用 CPack 工具。在顶层的 CMakeLists.txt 文件尾部添加 CPack 相关配置,执行 cpack 命令生成二进制包和源码包。使用 cpack -C CPackConfig.cmake 命令生成不同格式的二进制包文件,可以从中选择一个执行,通过 CPack 自动生成的交互式安装界面安装程序。
CMake: 使用CPack打包程序(windows)
当你想要分享一款自创工具时,一个安装程序比仅仅提供可执行文件和库文件显得更为专业。在CMake中,CPack工具就能帮助你实现程序的打包,让我们一起开始这个过程。 首先,确保你已经安装了CMake和用于打包的NSIS程序。NSIS通常会被添加到环境变量中以方便调用。对于这个示例,文件结构包含一个包含主函数的demopk文件夹,它生成可执行文件;mmath文件夹里有加法函数的源代码,以及相应的动态库和头文件。 在源码部分,你可以添加一个License.txt文件,写入使用说明或欢迎信息,这些内容会在安装过程中显示。在VSCode等集成开发环境里,通过点击"build"按钮即可生成。如果使用命令行,首先生成项目,然后进入build文件夹,执行以下命令打包: bashcpack.exe .\CPackConfig.cmake
然而,Windows用户可能会遇到问题,因为Chocolatey也可能使用了相同的cpack命令,导致冲突。为解决这个问题,你可以采取以下措施:使用cpack的绝对路径,例如:`C:\cmake\bin\cpack.exe .\CPackConfig.cmake`
或者,将CMake的cpack.exe重命名,如`cmpack.exe`,然后执行`cmpack.exe .\CPackConfig.cmake`
打包完成后,你将得到demopk-1.0.0-win.exe文件,可以进行安装,或者分享给朋友,让他们在自己的电脑上安装和使用。全网最细的CMake教程!(强烈建议收藏)
什么是 CMake?
CMake 是一个平台无关的编译配置工具,允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程,实现“Write once, run everywhere”。CMake 提供了更高级的编译配置能力,一些使用 CMake 的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等。
入门案例:单个源文件
通过编写 CMakeLists.txt 文件,配置编译流程,使用cmake . 和 make 命令生成并编译 Demo1 可执行文件。
多个源文件
使用辅助目录查找命令,自动化处理多个源文件的编译,简化文件名的添加过程。
多个目录,多个源文件
分别在项目根目录和子目录中编写 CMakeLists.txt 文件,实现对多目录多源文件的管理。
自定义编译选项
为项目增加编译选项,根据用户环境和需求选择最合适的编译方案,如使用自定义库或标准库。
修改 CMakeLists 文件和 main.cc 文件,实现根据 USE_MYMATH 选项调用标准库或自定义库。
编写 config.h.in 文件,由 CMake 自动生成配置文件。
安装和测试
CMake 提供安装规则和测试工具,通过 make install 和 make test 命令完成。
支持 gdb
通过指定 Debug 模式下的选项,使生成的程序支持 gdb 调试。
添加环境检查
检查系统是否具备特定功能,如 pow 函数,根据结果选择使用自定义函数或标准库函数。
添加版本号
通过配置文件指定主版本号和副版本号,实现项目版本信息的自动获取。
生成安装包
使用 CPack 工具配置生成不同平台的二进制安装包和源码安装包。
项目迁移
CMake 可以轻松迁移至不同平台的工程环境,提供自动推导 CMakeLists.txt 的方法。
类似工具推荐
了解 Linux 内核网络协议栈、嵌入式开发、Linux 内核总线驱动设备模型等知识,掌握进阶攻略和项目实战。
2024-12-22 21:38
2024-12-22 21:20
2024-12-22 20:40
2024-12-22 20:40
2024-12-22 20:00