CMake笔记(2)预定义变量

本文详细介绍了CMake预定义变量的功能与用途,包括版本号、系统信息、目录路径、编译选项等,并展示了如何利用这些变量进行项目配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMake预定义变量

  • CMAKE_MAJOR_VERSION cmake主版本号,如2.8.6中的2。
  • CMAKE_MINOR_VERSION cmake次版本号,如2.8.6中的8。
  • CMAKE_PATCH_VERSION cmake补丁等级,如2.8.6中的6。
  • CMAKE_SYSTEM 系统名称,例如Linux-2.6.22。
  • CAMKE_SYSTEM_NAME 不包含版本的系统名,如Linux。
  • CMAKE_SYSTEM_VERSION 系统版本,如2.6.22。
  • CMAKE_SYSTEM_PROCESSOR 处理器名称,如i686。
  • UNIX 在所有的类UNIX平台为TRUE,包括OS X和cygwin。
  • WIN32 在所有的win32平台为TRUE,包括cygwin。
  • CMAKE_SOURCE_DIR、PROJECT_SOURCE_DIR、<projectname>_SOURCE_DIR,这三个变量指代的内容是一致的,是工程顶层目录。
  • CMAKE_BINARY_DIR、PROJECT_BINARY_DIR、<projectname>_BINARY_DIR,这三个变量指代的内容是一致的,如果是in source编译,指得就是工程顶层目录,如果 是out-of-source编译,指的是工程编译发生的目录。
  • CMAKE_CURRENT_SOURCE_DIR,指的是当前处理的CMakeLists.txt所在的路径。

  • CMAKE_CURRRENT_BINARY_DIR,如果是in-source编译,它跟CMAKE_CURRENT_SOURCE_DIR一致,如果是out-ofsource 编译,他指的是target编译目录。

  • CMAKE_CURRENT_LIST_FILE,输出调用这个变量的CMakeLists.txt的完整路径。

  • CMAKE_CURRENT_LIST_LINE,输出这个变量所在的行,可以定位当前CMakeList.txt文件语句执行的位置。
  • CMAKE_MODULE_PATH ,定义自己的cmake模块所在的路径。
  • EXECUTABLE_OUTPUT_PATH ,重新定义目标二进制可执行文件的存放位置
  • LIBRARY_OUTPUT_PATH ,重新定义目标链接库文件的存放位置
  • PROJECT_NAME ,返回通过PROJECT指令定义的项目名称
  • CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ,用来控制IF ELSE语句的书写方式
  • CMAKE_BUILD_TYPE,控制 Debug 和 Release 模式的构建,例如:

在CMakeList.txt文件中

SET(CMAKE_BUILD_TYPE Debug)

使用命令行参数

cmake DCMAKE_BUILD_TYPE=Release

 

  • BUILD_SHARED_LIBS, 控制默认的库编译方式,如果未进行设置,使用ADD_LIBRARY时又没有指定库类型,默认编译生成的库都是静态库 
  • CMAKE_C_FLAGS, 设置C编译选项
  • CMAKE_CXX_FLAGS, 设置C++编译选项
  • CROSS_TOOLCHAIN_PREFIX ,指定编译器路径
  • CMAKE_C_COMPILER,指定c编译器
  • CMAKE_CXX_COMPILER,指定c++编译器
  • CMAKE_INSTALL_PREFIX,指定安装路径
  • CMAKE_INCLUDE_PATH,配合 FIND_FILE() 以及 FIND_PATH() 使用。如果头文件没有存放在常规路径(/usr/include, /usr/local/include等),则可以通过这些变量就行弥补。如果不使用 FIND_FILE 和 FIND_PATH的话,CMAKE_INCLUDE_PATH,没有任何作用。
  • CMAKE_LIBRARY_PATH,配合 FIND_LIBRARY() 使用,否则没有任何作用。

  • CMAKE_MODULE_PATH,cmake 为上百个软件包提供了查找器(finder):FindXXXX.cmake当使用非cmake自带的finder时,需要指定finder的路径,这就是CMAKE_MODULE_PATH,配合 FIND_PACKAGE()使用。

<think>嗯,用户想了解CMake的使用教程和配置示例。首先,我需要回忆一下CMake的基础知识,确保自己记得正确。CMake是一个跨平台的构建工具,可以生成Makefile或者项目文件,比如Visual Studio的项目。用户可能刚开始接触,所以应该从基本语法和常用命令开始。 用户提到参考了站内的两篇引用,其中一篇是CMake的入门文章,另一篇是关于Apollo CyberRT的环境配置。可能需要结合这些内容,提供一些实际的例子,比如如何编写CMakeLists.txt,如何设置变量,添加可执行文件,链接库等。 接下来,要确保回答符合用户的要求:结构清晰,分步骤解决问题,并且保证真实可靠。可能需要分几个部分,比如基础语法、常用命令、配置示例、高级功能,以及相关问题。还要注意用户的系统级指令,比如数学公式的格式,但这个问题可能不太涉及数学内容,不过如果有的话,比如路径中的变量,需要用$符号包裹。 用户可能的需求是学习CMake的基本使用,配置项目,处理依赖库,可能还有如何管理不同平台的构建。所以需要覆盖这些方面。同时,用户可能对如何查找学习资料感兴趣,所以需要推荐一些官方文档或者教程。 另外,用户提供的示例中有Python代码,但CMake是用于C/C++项目的,所以可能需要调整示例的内容。不过用户的问题是关于CMake的,所以应该提供CMake的配置示例,比如如何编译一个简单的程序,如何添加子目录,链接库等。 需要注意引用标识,比如在提到protobuf安装时,引用[^2]。同时,生成的相关问题应该与CMake相关,比如如何管理依赖、跨平台配置、模块化设计等。 最后,检查是否所有行内代码和命令都正确,比如使用`project()`和`add_executable()`等命令,确保语法正确。还要确保使用中文回答,避免使用Markdown格式,但用户示例中使用了代码块,可能需要按照用户的示例来处理,比如用三个反引号包裹代码块。 总结一下,回答的结构应该是先介绍CMake的基础,然后逐步深入,给出配置示例,最后提供相关问题和参考资料。确保引用正确,并覆盖用户可能需要的各个方面。</think>### CMake 使用教程与配置示例 #### 一、CMake 基础语法 1. **项目定义** 使用 `project()` 定义项目名称和版本: ```cmake project(MyProject VERSION 1.0 LANGUAGES C CXX) ``` 2. **变量与条件判断** - 变量赋值:`set(VAR_NAME value)` - 条件判断:`if()...else()...endif()` 示例: ```cmake set(USE_OPENCV ON) if(USE_OPENCV) find_package(OpenCV REQUIRED) endif() ``` 3. **添加可执行文件** ```cmake add_executable(my_app main.cpp) ``` #### 二、常用命令与配置 1. **包含头文件目录** ```cmake include_directories(${PROJECT_SOURCE_DIR}/include) ``` 2. **链接库文件** ```cmake target_link_libraries(my_app PRIVATE OpenCV::OpenCV) ``` 3. **添加子目录(模块化)** ```cmake add_subdirectory(src/utils) ``` #### 三、配置示例 **示例1:基础项目** ```cmake cmake_minimum_required(VERSION 3.10) project(HelloWorld) add_executable(hello main.cpp) ``` **示例2:依赖外部库(以Protobuf为例)** ```cmake cmake_minimum_required(VERSION 3.10) project(ProtoDemo) # 查找Protobuf库 find_package(Protobuf REQUIRED) include_directories(${Protobuf_INCLUDE_DIRS}) # 生成代码 protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS proto/example.proto) # 添加可执行文件 add_executable(demo main.cpp ${PROTO_SRCS} ${PROTO_HDRS}) target_link_libraries(demo ${Protobuf_LIBRARIES}) ``` 安装依赖库的命令参考自[^2]。 #### 四、高级功能 1. **生成配置文件** 使用 `configure_file()` 将模板文件替换为实际配置: ```cmake configure_file(config.h.in config.h) ``` 2. **自定义构建选项** ```cmake option(BUILD_TESTS "Enable tests" ON) if(BUILD_TESTS) add_subdirectory(tests) endif() ``` 3. **跨平台支持** ```cmake if(WIN32) add_definitions(-DWINDOWS) elseif(UNIX) add_definitions(-DLINUX) endif() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪流之源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值