cmake 规则终结 (中文版)
CMake是跨平台的自动化构建系统,它使用CMakeLists.txt文件来定义构建规则。CMake的优点在于它简单易用,且比Autotools等构建系统有着更加清晰的语法规则。在每个源代码目录中都需要有一个CMakeLists.txt文件,以便CMake能够根据其中定义的规则生成Makefile。CMake语句不区分大小写,一般以一句一行编写,注释使用井号(#)。 CMake可以进行内部构建和外部构建。内部构建指的是在源码所在的工程目录下执行cmake命令,而外部构建则是将编译生成的文件放在与源码文件不同的目录下。这种方式有助于保持工程源代码的整洁。 CMake中的变量使用${}方式取值,但是在IF语句中可以直接使用变量名取值。CMake指令的参数可以用空格或分号隔开。例如,SET(SRC_LIST main.cpp hello.cpp)可以写成SET(SRC_LIST "main.cpp" "hello.cpp")或者SET(SRC_LIST "main.cpp";"hello.cpp")。 CMake预定义了一系列变量,例如PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR,它们分别表示工程的二进制文件目录和源文件目录。还有其他一些重要的变量,如CMAKE_BINARY_DIR、CMAKE_SOURCE_DIR、CMAKE_CURRENT_BINARY_DIR、CMAKE_CURRENT_SOURCE_DIR、CMAKE_CURRENT_LIST_FILE、CMAKE_CURRENT_LIST_LINE、<projectname>_BINARY_DIR、<projectname>_SOURCE_DIR、EXECUTABLE_OUTPUT_PATH、LIBRARY_OUTPUT_PATH和CMAKE_INSTALL_PREFIX。 CMAKE_INSTALL_PREFIX变量用于指定安装文件的路径,默认是/usr/local/bin。PROJECT_NAME变量返回通过PROJECT指令定义的项目名称。CMAKE_INCLUDE_CURRENT_DIR变量用于自动添加工程目录到包含目录列表中。 CMAKE_MODULE_PATH变量用于指定自己定义的CMake模块路径,这样可以在CMakeLists.txt中包含和使用这些模块。 CMake指令PROJECT用于定义工程名称,并隐含设置工程二进制和源文件目录变量。变量如CMAKE_MAJOR_VERSION、CMAKE_MINOR_VERSION、CMAKE_PATCH_VERSION用于表示CMake的版本信息,CMAKE_SYSTEM、CMAKE_SYSTEM_NAME、CMAKE_SYSTEM_VERSION、CMAKE_SYSTEM_PROCESSOR则表示系统的相关信息。 开关选项如CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS用于控制if-else的书写方式。BUILD_SHARED_LIBS是一个设置开关,用来控制是构建静态库还是共享库。CMAKE_C_FLAGS和CMAKE_CXX_FLAGS变量用于设置C和C++编译选项。 CMake的语法和结构具有一定的灵活性,它支持通过命令行或图形用户界面来生成特定平台的本地构建环境。CMake的使用帮助开发者专注于编写代码,而不需要担心不同平台之间的构建差异,从而使开发者能够更加专注于项目开发本身,而将构建和编译过程交给CMake来处理。