CMake如何决定生成lib或lib64安装目录?能否预判?
CMake 决定 lib/lib64 安装目录的规则及预判方法
一、CMake 判定目录的核心逻辑
- 系统默认布局主导:CMake 依赖
GNUInstallDirs模块识别系统标准目录结构。像 CentOS 这类 RHEL 系发行版,64位系统默认用lib64作为库目录;而 MacOS、Debian/Ubuntu 等多数系统,64位环境下默认用lib。32位系统无论哪种发行版,基本都统一用lib。 - 变量优先级覆盖:如果在执行
cmake命令时手动指定了CMAKE_INSTALL_LIBDIR参数(比如-DCMAKE_INSTALL_LIBDIR=lib),会直接覆盖系统默认值。另外,部分项目的CMakeLists.txt可能会自行设置该变量,但规范的项目都会基于GNUInstallDirs的默认逻辑来配置。 - 架构适配:当系统是32位架构时,CMake 会强制使用
lib目录;64位架构下则遵循发行版的既定规则。
二、如何预判安装目录类型
- 直接查询系统默认值:在终端执行以下命令,可直接输出当前系统下 CMake 默认的库目录:
cmake -DPRINT_GNUINSTALLDIRS=ON -P <(echo 'include(GNUInstallDirs); message(STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}")') - 检查项目配置:查看目标项目的
CMakeLists.txt,确认是否显式设置了CMAKE_INSTALL_LIBDIR,或是依赖GNUInstallDirs模块来获取默认值。 - 强制固定目录:如果不需要依赖系统默认,在运行
cmake时直接通过-DCMAKE_INSTALL_LIBDIR=lib或-DCMAKE_INSTALL_LIBDIR=lib64参数指定,就能完全控制安装目录的类型。
内容的提问来源于stack exchange,提问作者Victor Eijkhout
相关产品推荐
相关产品推荐

