CMake - 环境变量

一、控制构建的环境变量

环境变量说明可设置的值
CMAKE_APPLE_SILICON_PROCESSOR在MacOS系统中,用于告诉CMake使用哪个架构进行编译arm64 / x86_64
CMAKE_BUILD_PARALLEL_LEVEL构建时要使用的最大并发进程数数值
CMAKE_BUILD_TYPE构建类型Debug / Release / RelWithDebInfo / MinSizeRel
CMAKE_CONFIGURATION_TYPES多配置生成器上的可用构建类型Debug / Release / RelWithDebInfo / MinSizeRel
CMAKE_CONFIG_TYPE
CMAKE_EXPORT_COMPILE_COMMANDS在生成期间启用/禁用编译命令的输出,如果开启则生成的文件compile_commands.json,包含所有编译单元所执行的指令ON / OFF
CMAKE_GENERATOR指定生成器,可以在cmake指令中使用-GUnix Makefiles, Ninja, etc.
CMAKE_GENERATOR_INSTANCE用户提供的特定生成器的特定生成器实例例如:对于Visual Studio 15 2017 Generator(及更高版本),这将指定所选VS实例的VS安装目录的绝对路径。
CMAKE_GENERATOR_PLATFORM用户提供的特定特定平台的特定生成器例如:对于Visual Studio 15 2017 Generator(及更高版本),这将指定特定的平台架构。
CMAKE_GENERATOR_TOOLSET用户提供的本地构建系统工具集
CMAKE_INSTALL_MODE
CMAKE_<LANG>_COMPILER_LAUNCHER其中,<LANG>为 C, CXX, Fortran, HIP, ISPC, OBJC, OBJCXX, or CUDA
CMAKE_<LANG>_FLAGS其中,<LANG>为 C, CXX, Fortran, HIP, ISPC, OBJC, OBJCXX, or CUDA
CMAKE_<LANG>_LINKER_LAUNCHER其中,<LANG>为 C, CXX, Fortran, HIP, ISPC, OBJC, OBJCXX, or CUDA
CMAKE_MSVCIDE_RUN_PATH
CMAKE_NO_VERBOSE实际发布时,使用它去掉一些冗余信息ON / OFF
CMAKE_OSX_ARCHITECTURESMacOS系统指定架构
CMAKE_TOOLCHAIN_FILE工具链文件路径,交叉编译的工具链toolchain.cmake,该文件里面设置了一系列CMAKE变量和属性,比如C_COMPILER,CXX_COMPILER等
DESTDIR重新指定所有安装文件的路径, make install DESTDIR= < $CUSTOM_PREFIX>在configure或cmake时,指定了要安装的路径后,以这种方式make install安装的文件会通通安装到以$CUSTOM_PREFIX为前缀的目录中,这样,开发者直接对这目录中的文件打包,即可发布使用
LDFLAGS只有在第一个配置上使用cmake来确定默认链接器标志,之后LDFLAGS 的值存储在缓存中作为CMAKE_EXE_LINKER_FLAGS_INIT,CMAKE_SHARED_LINKER_FLAGS_INIT 和CMAKE_MODULE_LINKER_FLAGS_INIT。对于任何配置运行(包括第一个配置),如果定义了等效的CMAKE_<TYPE>_LINKER_FLAGS_INIT变量,则将忽略环境变量。
<PackageName>_ROOTfind_package(<PackageName>)将用到此变量设置的package路径,例如要find_package(Foo),则需要设置 Foo_ROOT,否则会报CMP0074的警告Package的路径
VERBOSE实际发布时,使用它去掉一些冗余信息

二、改变行为的环境变量

环境变量说明可设置的值
CMAKE_PREFIX_PATH设置库的搜索路径,可用于 find_package(), find_program(), find_library(), find_file(), find_path() 在改路径查找库路径

三、其他

环境变量说明可设置的值
ROJECT_BINARY_DIR工程的二进制文件路径
CMAKE_CURRENT_BINARY_DIR外部编译时,指的是target目录,内部编译时,指的是顶级目录
ROJECT_SOURCE_DIR工程源文件路径
CMAKE_SOURCE_DIR工程根目录路径,如果有多层子目录,在子目录CMakeLists文件中获取到的也是根目录的路径
CMAKE_CURRENT_SOURCE_DIR当前源文件路径,即CMakeList.txt所在的目录
CMAKE_CURRENT_LIST_DIR当前CMakeList.txt所在的目录
CMAKE_CURRENT_LIST_FILE当前CMakeList.txt文件完整路径
CMAKE_CURRENT_LIST_LINE当前所在的行
CMAKE_MODULE_PATH如果工程复杂,可能需要编写一些cmake模块,这里通过SET指定这个变量
EXECUTABLE_OUTPUT_PATH当前工程生成可执行文件,生成的可执行文件存放的目录
LIBRARY_OUTPUT_DIR当前工程生成库文件,生成的库文件存放的目录
BINARY_OUTPUT_DIR生成的二进制文件存放的目录
BUILD_SHARED_LIBS是否编译动态库,与add_library的第二个参数意思一样,设置ON则生成动态库,否则生成静态库ON / OFF

sample_004

### CMake命令行版本与CMake-GUI版本不一致的原因及解决方法 在Windows系统中,如果发现 `cmake --version` 和 CMake-GUI 的版本不一致,可能由以下原因引起: 1. **不同安装源导致的版本差异** 如果系统中存在多个 CMake 安装实例,例如通过独立安装程序安装的 CMake 和通过其他工具(如 Chocolatey、Scoop 或 Anaconda)安装的 CMake,可能会导致命令行版本和 GUI 版本不一致[^1]。 2. **环境变量配置问题** 在安装过程中,如果选择了自动添加环境变量,但未正确重启系统或终端,可能导致命令行调用的 CMake 版本与实际安装的版本不一致。此外,如果手动修改了环境变量路径,也可能导致调用不同的 CMake 实例[^1]。 3. **缓存或历史残留** 系统中可能存在旧版本的 CMake 安装文件或残留配置,这些文件可能干扰当前版本的识别和使用[^2]。 #### 解决方法 以下是同步 CMake 命令行版本与 CMake-GUI 版本的方法: 1. **检查已安装的 CMake 版本** 打开 PowerShell 或命令提示符,输入以下命令以确认当前使用的 CMake 版本: ```powershell cmake --version ``` 同时,启动 CMake-GUI 并查看其标题栏或帮助菜单中的版本信息,对比两者的版本号是否一致[^1]。 2. **清理旧版本残留** 如果发现系统中存在多个 CMake 安装实例,建议卸载所有旧版本,并确保删除相关的残留文件和注册表项。可以通过以下步骤执行: - 卸载旧版本:进入控制面板 > 程序和功能,查找并卸载 CMake- 删除残留文件:检查并删除以下路径中的旧版本文件夹(如果存在): - `C:\Program Files\CMake` - `C:\Program Files (x86)\CMake` - 清理环境变量:打开系统属性 > 高级 > 环境变量,检查 `PATH` 中是否有指向旧版本 CMake 的路径,并将其移除。 3. **重新安装最新版本** 访问 [CMake 官方网站](https://cmake.org/download/) 下载最新的 Windows 安装程序。运行安装程序时,确保选择“Add CMake to the system PATH”选项以自动配置环境变量。安装完成后,重启系统以确保新版本生效[^2]。 4. **验证安装** 重新启动 PowerShell 或命令提示符,输入以下命令验证版本一致性: ```powershell cmake --version ``` 同时启动 CMake-GUI,检查其版本信息是否与命令行一致[^1]。 5. **配置环境变量(可选)** 如果仍然存在版本不一致的问题,可以手动调整环境变量,确保 `PATH` 中优先指向最新版本的 CMake 可执行文件路径。例如: - 添加路径:`C:\Program Files\CMake\bin` - 确保该路径位于其他可能包含旧版本 CMake 的路径之前[^1]。 #### 注意事项 - 如果需要频繁切换不同版本的 CMake,可以考虑使用虚拟环境管理工具(如 Conda)来隔离不同版本的依赖[^4]。 - 在重新安装或配置过程中,务必备份重要数据,以防误删关键文件。 ```python # 示例代码:验证 CMake 版本一致性 import subprocess def check_cmake_version(): try: version_info = subprocess.check_output(['cmake', '--version']).decode('utf-8') print("CMake Command Line Version:", version_info.splitlines()[0]) except FileNotFoundError: print("CMake is not installed or not in PATH.") check_cmake_version() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值