1.Cmake 语法与实战入门
2.CMake: 使用CPack打包程序(windows)
3.全网最细的码包CMake教程!(强烈建议收藏)
Cmake 语法与实战入门
CMake 是码包一个跨平台、开源的码包构建系统,允许开发者编写一种平台无关的码包 CMakeList.txt 文件来定制整个编译流程,然后根据目标用户的码包平台生成所需的本地化 Makefile 和工程文件。在 Linux 平台下使用 CMake 生成 Makefile 并编译的码包diffpdf源码流程如下:
在有些情况下,如果 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) 发现一个目录下所有的ibeacon 工具源码下载源代码文件并将列表存储在一个变量中。
自定义搜索规则,可以使用 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 追加设置变量的值。例如,汽车订票源码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 的电子公告源码预定义值来决定是否调用标准库还是 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 内核总线驱动设备模型等知识,掌握进阶攻略和项目实战。