CMake 命令行参数
- 前言
- CMake命令行参数
- -G:指定生成器。
- 生成器
- -D:定义CMake变量。
- -B:指定构建目录。
- -E:调用CMake内置命令。
- 其他常用参数
- CMake命令行参数的使用实例
- 指定构建类型为Release:
- 指定安装目录为/usr/local:
- 指定使用Android NDK作为交叉编译工具链:
- 指定使用C++11标准:
- 定义CMake变量:
- 调用CMake内置命令echo:
- 指定构建目录:
- 指定使用gcc编译器:
- 指定构建共享库:
- 指定生成的可执行文件和库文件的输出目录:
- 指定使用Ninja生成器:
- 指定CMake模块路径:
- 指定导出编译命令:
- 指定运行时动态链接库搜索路径:
- 指定使用Clang编译器且开启优化选项:
- 指定使用Debug构建类型:
- 指定使用Release构建类型,并生成Makefile文件:
- 指定第三方库安装路径:
- 指定使用GCC编译器且开启调试信息:
- 总结
前言
CMake是一个跨平台的构建系统生成工具,可以自动生成Makefile或者其他构建系统所需的文件。CMake的优点包括可移植性、易于使用、可扩展性和高效性,因此越来越多的项目开始采用CMake作为构建工具。在使用CMake构建项目时,我们需要编写CMakeLists.txt文件来描述项目的构建过程,并且使用cmake命令生成Makefile文件。除此之外,CMake还支持许多命令行参数,这些参数可以帮助我们更加灵活地控制构建过程,根据具体的项目需求进行设置。本文将介绍常用的CMake命令行参数及其使用实例,帮助读者更好地使用CMake进行项目构建。
CMake命令行参数
-G:指定生成器。
生成器
生成器是一个特定于构建系统的工具,用于将CMake生成的Makefile或项目文件转换为实际的可执行文件、静态库或动态库。不同的构建系统有不同的生成器,每个生成器都可以将CMake生成的文件转换为适用于特定构建系统的文件。
例如,Unix Makefile生成器生成适用于Unix/Linux系统的Makefile文件,Ninja生成器生成适用于Ninja构建系统的项目文件,Visual Studio生成器生成适用于Visual Studio IDE的项目文件,等等。
生成器通过读取CMake生成的文件并将其转换为构建系统可以使用的文件来执行其工作。例如,Unix Makefile生成器将CMake生成的Makefile文件转换为实际的可执行文件、静态库或动态库。
总之,生成器是一个特定于构建系统的工具,用于将CMake生成的Makefile或项目文件转换为实际的可执行文件、静态库或动态库。不同的构建系统有不同的生成器,每个生成器都可以将CMake生成的文件转换为适用于特定构建系统的文件。
使用该参数可以指定使用的生成器,例如Unix Makefiles、Ninja、Visual Studio等。
在CMake中,-G参数用于指定生成器,即用于生成特定构建系统的Makefiles或项目文件。不同的构建系统有不同的生成器可以选择,例如Unix Makefiles、Ninja、Visual Studio等。下面是一些常用的-G参数:
-G "Unix Makefiles"
:生成适用于Unix/Linux系统的Makefile文件。
例如:
cmake -G "Unix Makefiles" ..
-G Ninja:生成适用于Ninja构建系统的项目文件。
例如:
cmake -G Ninja ..
-G “Visual Studio 16”:生成适用于Visual Studio 2019的项目文件。
例如:
cmake -G "Visual Studio 16" ..
-G “Xcode”:生成适用于Xcode IDE的项目文件。
例如:
cmake -G "Xcode" ..
-G “CodeBlocks – Unix Makefiles”:生成适用于Code::Blocks IDE的Makefile文件。
例如:
cmake -G "CodeBlocks - Unix Makefiles" ..
总之,-G参数用于指定生成器,帮助CMake生成适用于特定构建系统的Makefiles或项目文件。不同的构建系统有不同的生成器可以选择,您可以根据自己的需要选择适合的生成器。-D:定义CMake变量。
-D参数可以用于在CMake中定义变量并将其传递给CMakeLists.txt文件,这些变量可以用于控制构建过程中的行为。具体而言,-D参数可以用于:
定义变量并设置其值,例如:-DVAR_NAME=VALUE。
定义布尔类型的变量,其值为ON,例如:-DVAR_NAME。
定义路径类型的变量,例如:-DVAR_NAME:PATH=/path/to/dir。
定义配置变量(缓存变量),例如:-DVAR_NAME:STRING=VALUE。
这些变量可以在CMakeLists.txt文件中使用,并在构建过程中控制Makefile的生成行为。-B:指定构建目录。
在CMake中,-B参数用于指定生成的构建目录,即将CMake生成的Makefile或项目文件保存到指定的目录中。这个目录可以是相对路径或绝对路径。
例如:
cmake -B build ..
这将生成一个名为build的构建目录,并将生成的Makefile或项目文件保存到该目录中。
您也可以使用绝对路径来指定构建目录,例如:
cmake -B /path/to/build ..
这将生成一个名为build的构建目录,并将生成的Makefile或项目文件保存到/path/to/build目录中。
总之,-B参数用于指定生成的构建目录,即将CMake生成的Makefile或项目文件保存到指定的目录中。这使得我们可以将源码和构建过程分开,以便更好地管理项目。-E:调用CMake内置命令。
在CMake中,-E参数用于执行一些与构建无关的命令,例如创建目录、复制文件、压缩文件等。这些命令不会生成Makefile或项目文件,而是在构建之外执行。
下面是一些常用的-E参数:
-E make_directory
:创建一个目录。
例如:
cmake -E make_directory build
这将在当前目录下创建一个名为build的目录。
-E copy
:将一个文件从源路径复制到目标路径。
例如:
cmake -E copy data.txt build/data.txt
这将将data.txt文件从当前目录复制到build目录中。
-E tar [ ...]
:压缩指定的文件为tar格式的归档文件。
例如:
cmake -E tar myarchive.tar file1.txt file2.txt
这将创建一个名为myarchive.tar的tar归档文件,其中包含file1.txt和file2.txt。
-E remove_directory
:递归删除一个目录。
例如:
cmake -E remove_directory build
这将递归删除build目录及其所有子目录和文件。总之,-E参数用于执行与构建无关的命令,例如创建目录、复制文件、压缩文件等。这些命令不会生成Makefile或项目文件,而是在构建之外执行。这使得我们可以在构建过程之外执行一些必要的操作,例如在构建之前创建目录,或在构建之后删除临时文件。
其他常用参数
-DCMAKE_BUILD_TYPE
:指定构建类型。使用该参数可以指定构建类型,例如Debug、Release等。-DCMAKE_C_COMPILER
:指定C编译器。使用该参数可以指定使用的C编译器,例如gcc、clang等。-DCMAKE_CXX_COMPILER
:指定C++编译器。使用该参数可以指定使用的C++编译器,例如g++、clang++等。-DCMAKE_TOOLCHAIN_FILE
:指定交叉编译工具链。使用该参数可以指定交叉编译工具链,例如Android NDK、iOS SDK等。-DCMAKE_SYSTEM_NAME
:指定目标系统名称。使用该参数可以指定目标系统的名称,例如Linux、Windows、Android、iOS等。-DCMAKE_INSTALL_RPATH
:指定运行时动态链接库搜索路径。使用该参数可以指定运行时动态链接库搜索路径,使得程序在运行时可以找到所需的动态链接库。-DCMAKE_C_FLAGS
:指定C编译器选项。使用该参数可以指定C编译器的选项,例如-O0、-O2等。-DCMAKE_CXX_FLAGS
:指定C++编译器选项。使用该参数可以指定C++编译器的选项,例如-std=c++11、-stdlib=libc++等。-DBUILD_SHARED_LIBS
:指定是否构建共享库。使用该参数可以指定是否构建共享库,如果指定为ON,则生成共享库,否则生成静态库。-DCMAKE_VERBOSE_MAKEFILE
:指定生成Makefile时是否显示详细信息。使用该参数可以指定是否显示详细的构建信息。-DCMAKE_MODULE_PATH
:指定CMake模块路径。使用该参数可以指定CMake的模块路径,以便CMake可以找到所需的模块。-DCMAKE_EXPORT_COMPILE_COMMANDS
:指定是否导出编译命令。使用该参数可以指定是否导出编译命令,以便其他工具可以使用编译命令。-DCMAKE_PREFIX_PATH
:指定第三方库安装路径。使用该参数可以指定第三方库的安装路径,以便CMake可以找到所需的库文件。-DCMAKE_INSTALL_PREFIX
:指定安装目录。使用该参数可以指定安装目录,使得在执行make install命令时,生成的可执行文件、库文件、头文件等可以被安装到指定的目录下。
CMake命令行参数的使用实例
下面是一些CMake命令行参数的使用示例:
指定构建类型为Release:
cmake -DCMAKE_BUILD_TYPE=Release /path/to/source
指定安装目录为/usr/local:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local /path/to/source
指定使用Android NDK作为交叉编译工具链:
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/android.toolchain.cmake /path/to/source
指定使用C++11标准:
cmake -DCMAKE_CXX_FLAGS=-std=c++11 /path/to/source
定义CMake变量:
cmake -DVAR=value /path/to/source
调用CMake内置命令echo:
cmake -E echo "Hello World"
指定构建目录:
cmake -B /path/to/build /path/to/source
指定使用gcc编译器:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ /path/to/source
指定构建共享库:
cmake -DBUILD_SHARED_LIBS=ON /path/to/source
指定生成的可执行文件和库文件的输出目录:
cmake -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=/path/to/bin -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/path/to/lib /path/to/source
指定使用Ninja生成器:
cmake -G Ninja /path/to/source
指定CMake模块路径:
cmake -DCMAKE_MODULE_PATH=/path/to/modules /path/to/source
指定导出编译命令:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON /path/to/source
指定运行时动态链接库搜索路径:
cmake -DCMAKE_INSTALL_RPATH=/path/to/lib /path/to/source
指定使用Clang编译器且开启优化选项:
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_FLAGS=-O2 -DCMAKE_CXX_FLAGS=-O2 /path/to/source
指定使用Debug构建类型:
cmake -DCMAKE_BUILD_TYPE=Debug /path/to/source
指定使用Release构建类型,并生成Makefile文件:
cmake -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" /path/to/source
指定第三方库安装路径:
cmake -DCMAKE_PREFIX_PATH=/path/to/third_party /path/to/source
指定使用GCC编译器且开启调试信息:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_C_FLAGS=-g -DCMAKE_CXX_FLAGS=-g /path/to/source
总结
综上所述,CMake是一个强大的跨平台构建系统生成工具,可以自动生成Makefile或者其他构建系统所需的文件。CMake的命令行参数可以帮助我们更加灵活地控制构建过程,根据具体的项目需求进行设置,以便生成所需的构建结果。
在使用CMake构建项目时,我们可以根据项目的需求选择不同的命令行参数,以便生成所需的构建结果。同时,我们还可以通过定义CMake变量和调用CMake内置命令等方式来进行更加灵活的控制。总之,CMake的命令行参数是非常有用的工具,对于需要使用CMake进行项目构建的开发者来说,掌握这些命令行参数是非常重要的。
希望本文对读者在使用CMake时有所帮助。如果读者有任何疑问或建议,欢迎在评论区留言。