个人网站如何加入百度联盟动态和静态网站的区别

当前位置: 首页 > news >正文

个人网站如何加入百度联盟,动态和静态网站的区别,网站建设 中,在线域名查询网站CMakeList从入门到精通的文章有很多不再赘述#xff08; 此处附带一篇优秀的博文链接#xff1a;一个简单例子#xff0c;完全入门CMake语法与CMakeList编写 #xff09;。 本文主要列举 CMake 中常用命令的详细说明、优缺点分析以及推荐做法#xff0c;以更好地理解和灵… CMakeList从入门到精通的文章有很多不再赘述 此处附带一篇优秀的博文链接一个简单例子完全入门CMake语法与CMakeList编写 。 本文主要列举 CMake 中常用命令的详细说明、优缺点分析以及推荐做法以更好地理解和灵活使用这些命令。 目录

  1. 版本控制 cmake_minimum_required

  2. 项目定义project

  3. 指定源文件 set AUX_SOURCE_DIRECTORY file(GLOB)

  4. 指定头文件路径 include_directories target_include_directories

  5. 指定库文件路径 link_directories target_link_directories

  6. 链接库文件 link_libraries target_link_libraries

  7. 编译选项 add_compile_options target_compile_options 8.构建子目录 add_subdirectory 9.定义可执行文件 add_executable 10.定义库文件目标 add_library 11.为目标添加编译定义 target_compile_definitions 12.定义可配置选项 option 13.输出消息到控制台 message 14.PUBLIC、PRIVATE 和 INTERFACE 关键字 PUBLIC: PRIVATE: INTERFACE: 总结 15设置target属性 SET_TARGET_PROPERTIES 16.文件安装INSTALL 语法 说明 一些用法举例 17.CMake常用路径说明 核心安装路径变量: 构建路径相关变量: 其他常用路径变量: 修改安装路径 注意 1. 版本控制 cmake_minimum_required 功能: 指定 CMake 的最低版本要求。 优点: 确保项目使用的 CMake 版本满足要求避免因版本不兼容导致的问题。 缺点: 无明显缺点。 推荐做法: 始终在 CMakeLists.txt 的开头添加此命令并使用项目所需的最低版本。示例
    cmake_minimum_required(VERSION 3.15)2. 项目定义project project(PROJECT-NAME [LANGUAGES] [C] [CXX] [Fortran] …)功能定义项目名称和使用的编程语言。优点 自动设置一些默认变量如 PROJECT_NAME、PROJECT_SOURCE_DIR 等。支持多语言项目。 缺点 如果未指定语言CMake 会默认启用所有支持的语言可能导致不必要的配置。 推荐做法 明确指定项目名称和语言。示例 project(MyProject LANGUAGES C CXX)

  8. 指定源文件 set set(variable value) 功能定义变量并赋值常用于指定源文件列表。优点 简单直观适合手动指定源文件。 缺点 需要手动维护源文件列表容易遗漏或重复。 推荐做法 适用于小型项目或源文件数量较少的情况。示例
    set(SRC_FILES main.cpp utils.cpp) AUX_SOURCE_DIRECTORY AUX_SOURCE_DIRECTORY(dir variable) 功能自动扫描指定目录下的源文件并存储到变量中。优点 自动收集源文件减少手动维护的工作量。 缺点 无法过滤特定文件类型可能包含不需要的文件。不推荐在现代 CMake 中使用。 推荐做法 适用于快速原型开发但不推荐用于正式项目。示例
    AUX_SOURCE_DIRECTORY(../src SRC_MAIN) AUX_SOURCE_DIRECTORY(../src/client SRC_CL) AUX_SOURCE_DIRECTORY(../src/server SRC_SR) AUX_SOURCE_DIRECTORY(../src/utils SRC_UTILS) file(GLOB) file(GLOB variable pattern)功能通过通配符匹配文件并存储到变量中。优点 灵活支持通配符匹配。 缺点 不会自动检测新增或删除的文件可能导致构建系统不一致。 推荐做法 适用于动态生成文件或快速原型开发但不推荐用于正式项目。示例
    file(GLOB SRC_FILES src/.cpp)FILE(GLOB scripts sh/.sh) INSTALL(FILES ${scripts}DESTINATION share/scripts )

  9. 指定头文件路径 include_directories include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 …)功能全局添加头文件搜索路径。优点 简单易用适用于小型项目。 缺点 全局生效可能导致命名冲突或污染。 推荐做法 适用于小型项目或快速原型开发。示例
    include_directories(include) include_directories(../libs/include)target_include_directories 功能为目标添加头文件搜索路径。优点 模块化设计只对指定目标生效。支持 PUBLIC、PRIVATE 和 INTERFACE 关键字控制依赖传递。 缺点 需要明确指定目标稍微复杂。 推荐做法 推荐用于现代 CMake 项目。示例
    target_include_directories(MyTarget PUBLIC include)5. 指定库文件路径 link_directories link_directories(dir1 dir2 …)功能全局添加库文件搜索路径。优点 简单易用适用于小型项目。 缺点 全局生效可能导致命名冲突或污染。 推荐做法 适用于小型项目或快速原型开发。示例
    link_directories(lib)target_link_directories 功能为目标添加库文件搜索路径。优点 模块化设计只对指定目标生效。支持 PUBLIC、PRIVATE 和 INTERFACE 关键字控制依赖传递。 缺点 需要明确指定目标稍微复杂。 推荐做法 推荐用于现代 CMake 项目。示例
    target_link_directories(MyTarget PUBLIC lib)6. 链接库文件 link_libraries 功能全局链接库文件。优点 简单易用适用于小型项目。 缺点 全局生效可能导致命名冲突或污染。 推荐做法 适用于小型项目或快速原型开发。示例
    link_libraries(mylib)target_link_libraries target_link_libraries(target [lib1 lib2 …])功能为目标链接库文件。优点 模块化设计只对指定目标生效。支持 PUBLIC、PRIVATE 和 INTERFACE 关键字控制依赖传递。 缺点 需要明确指定目标稍微复杂。 推荐做法 推荐用于现代 CMake 项目。示例
    target_link_libraries(MyTarget PUBLIC mylib)7. 编译选项 add_compile_options add_compile_options(option1 option2 …)功能全局添加编译选项。优点 简单易用适用于小型项目。 缺点 全局生效可能导致不必要的选项传递。 推荐做法 适用于小型项目或快速原型开发。示例
    add_compile_options(-Wall -Wextra)target_compile_options target_compile_options(target [BEFORE] INTERFACE|PUBLIC|PRIVATE option1 option2 …)功能为目标添加编译选项。优点 模块化设计只对指定目标生效。支持 PUBLIC、PRIVATE 和 INTERFACE 关键字控制依赖传递。 缺点 需要明确指定目标稍微复杂。 推荐做法 推荐用于现代 CMake 项目。示例
    target_compile_options(MyTarget PRIVATE -Wall -Wextra)8.构建子目录 add_subdirectory add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL]) 功能将子目录添加到构建过程中。优点: 支持模块化项目结构将代码组织成多个子目录。允许在子目录中定义独立的构建规则。可以使用 EXCLUDE_FROM_ALL 参数来排除子目录使其不参与默认的构建过程。 缺点: 子目录中的 CMakeLists.txt 文件会影响父目录的构建需要注意作用域。如果子目录的构建规则不正确可能会导致整个构建失败。 推荐做法: 将相关的代码组织到子目录中提高代码的可维护性。在子目录中编写独立的 CMakeLists.txt 文件定义子目录的构建规则。避免在子目录中修改父目录的变量或目标除非有明确的需求。尽量使用相对路径来引用子目录。示例
    add_subdirectory(src/mylib) add_subdirectory(test test_build)9.定义可执行文件 add_executable add_executable(target [source1] [source2] […]) 作用: 将子目录添加到构建过程中。 优点: 定义可执行文件的构建规则。可以指定源文件列表。可以使用 WIN32 和 MACOSX_BUNDLE 参数来创建特定平台的应用程序。 缺点: 需要手动指定源文件列表如果源文件较多可能会比较繁琐。 推荐做法: 使用 file(GLOB) 或 file(GLOB_RECURSE) 来自动查找源文件。将源文件组织到不同的目录中提高代码的可维护性。使用 target_link_libraries 来链接库文件。示例
    add_executable(my_app src/main.cpp src/utils.cpp)10.定义库文件目标 add_library add_library(target [STATIC|SHARED|MODULE] [source1] [source2] […]) 优点: 定义库文件的构建规则。可以指定库的类型静态库、动态库、模块库。可以指定源文件列表。 缺点: 需要手动指定源文件列表如果源文件较多可能会比较繁琐。 推荐做法: 使用 file(GLOB) 或 file(GLOB_RECURSE) 来自动查找源文件。将源文件组织到不同的目录中提高代码的可维护性。使用 target_include_directories 来指定头文件搜索路径。使用 target_link_libraries 来链接其他库文件。示例
    add_library(mylib SHARED src/mylib.cpp src/mylib_utils.cpp) add_library(mylib_static STATIC src/mylib.cpp src/mylib_utils.cpp)11.为目标添加编译定义 target_compile_definitions target_compile_definitions(目标名 [INTERFACE | PUBLIC | PRIVATE] 定义1 定义2 … 优点: 可以为目标添加编译定义用于控制编译行为。可以使用 INTERFACE、PUBLIC 和 PRIVATE 参数来控制定义的可见性。 缺点: 如果定义过多可能会使代码难以理解。 推荐做法: 使用有意义的定义名称提高代码的可读性。使用 INTERFACE、PUBLIC 和 PRIVATE 参数来控制定义的可见性避免定义冲突。尽量使用 option 命令来定义编译选项而不是直接使用编译定义。示例
    target_compile_definitions(my_app PRIVATE DEBUG_MODE) target_compile_definitions(mylib PUBLIC MY_LIB_VERSION1.0.0)12.定义可配置选项 option option(选项名 描述 [ON|OFF]) 优点: 可以定义可配置的选项允许用户在构建时选择不同的配置。可以使用 ON 和 OFF 参数来设置默认值。可以使用 if 语句来根据选项的值执行不同的操作。 缺点: 需要手动处理选项的值例如使用 if 语句。 推荐做法: 使用有意义的选项名称提高代码的可读性。为选项提供详细的描述方便用户理解选项的作用。使用 if 语句来根据选项的值执行不同的操作。尽量使用 option 命令来定义编译选项而不是直接使用编译定义。示例
    option(ENABLE_DEBUG Enable debug mode OFF) if(ENABLE_DEBUG)message(STATUS Debug mode is enabled)target_compile_definitions(my_app PRIVATE DEBUG_MODE) endif()13.输出消息到控制台 message message([STATUS|WARNING|AUTHOR_WARNING|SEND_ERROR|FATAL_ERROR] 消息内容) 优点: 可以输出不同级别的消息方便调试和跟踪构建过程。可以使用 STATUS、WARNING、AUTHOR_WARNING、SEND_ERROR 和 FATAL_ERROR 参数来指定消息的级别。 缺点: 消息输出过多可能会影响构建速度。 推荐做法: 使用 STATUS 级别来输出构建过程中的信息。使用 WARNING 级别来输出警告信息。使用 FATAL_ERROR 级别来输出错误信息并终止构建过程。避免输出过多的消息以免影响构建速度。示例
    message(STATUS Building project…) message(WARNING This is a warning message) message(FATAL_ERROR An error occurred)14.PUBLIC、PRIVATE 和 INTERFACE 关键字 在 CMake 中,PUBLIC、PRIVATE 和 INTERFACE 关键字用于控制目标属性的可见性和传播。这些关键字主要用于 target_include_directories()、target_compile_definitions() 和 target_link_libraries() 等命令中。 PUBLIC: 当一个目标使用 PUBLIC 关键字时,该目标的属性(包括头文件路径、编译定义和链接库)会被传播到依赖它的其他目标。 add_library(mylib STATIC mylib.cpp) target_include_directories(mylib PUBLIC include)在这种情况下,任何链接到 mylib 的目标都会继承 include 目录作为其头文件搜索路径。 PRIVATE: 当一个目标使用 PRIVATE 关键字时,该目标的属性只会应用于该目标本身,不会传播到依赖它的其他目标。 add_library(mylib STATIC mylib.cpp) target_include_directories(mylib PRIVATE include)在这种情况下,只有 mylib 自身会使用 include 目录作为头文件搜索路径,而依赖 mylib 的其他目标不会继承这个路径。
    INTERFACE: 当一个目标使用 INTERFACE 关键字时,该目标的属性不会应用于该目标本身,而是会传播到依赖它的其他目标。 add_library(mylib INTERFACE) target_include_directories(mylib INTERFACE include)在这种情况下,任何链接到 mylib 的目标都会继承 include 目录作为其头文件搜索路径,但 mylib 本身并不使用这个路径。 总结 PRIVATE仅对当前目标有效。PUBLIC对当前目标和所有依赖于该目标的目标有效。INTERFACE对当前目标无效仅对依赖于该目标的目标有效。 通过合理使用这三个关键字可以更好地管理目标之间的依赖关系和可见性从而提高项目的可维护性和可重用性。 15设置target属性 SET_TARGET_PROPERTIES SET_TARGET_PROPERTIES 是 CMake 中一个非常重要的命令用于设置目标target的属性。目标可以是可执行文件、库、自定义命令等。通过 SET_TARGET_PROPERTIES你可以控制目标的各种行为和特性例如 主要作用 配置目标的构建过程: 输出路径: 指定生成的可执行文件或库的输出目录。文件名: 修改生成的文件名。链接库: 指定目标需要链接的库。编译选项: 添加或修改编译器的选项。链接选项: 添加或修改链接器的选项。预处理器定义: 定义预处理器宏。包含目录: 指定头文件的搜索路径。源文件: 添加或删除源文件。 控制目标的行为: 类型: 设置目标的类型例如EXECUTABLE, SHARED_LIBRARY, STATIC_LIBRARY。安装规则: 定义如何安装目标。依赖关系: 指定目标依赖的其他目标。调试信息: 控制是否生成调试信息。运行时库: 指定运行时库的类型。 提供元数据: 版本信息: 设置目标的版本号。描述信息: 提供目标的描述。自定义属性: 添加自定义的属性供其他 CMake 代码使用。
    SET_TARGET_PROPERTIES(target1 target2 …PROPERTIESproperty1 value1property2 value2… )target1 target2 …: 要设置属性的目标列表。PROPERTIES: 关键字表示接下来是属性列表。property1 value1: 要设置的属性及其对应的值。 常用属性示例: OUTPUT_NAME: 指定输出文件名不包含扩展名。OUTPUT_DIRECTORY: 指定输出目录。PREFIX: 指定输出文件名的前缀。SUFFIX: 指定输出文件名的后缀。COMPILE_DEFINITIONS: 定义预处理器宏。COMPILE_OPTIONS: 添加编译选项。INCLUDE_DIRECTORIES: 指定头文件搜索路径。LINK_DIRECTORIES: 指定库文件搜索路径。LINK_LIBRARIES: 指定需要链接的库。RUNTIME_OUTPUT_DIRECTORY: 指定运行时输出目录例如DLL。VERSION: 设置目标的版本号。SOVERSION: 设置共享库的 SOVERSION。INSTALL_NAME_DIR: 设置 macOS 上的安装名称目录。DEBUG_POSTFIX: 设置调试版本输出文件名的后缀。RELEASE_POSTFIX: 设置发布版本输出文件名的后缀。POSITION_INDEPENDENT_CODE: 控制是否生成位置无关代码PIC。CXX_STANDARD: 设置 C 标准。C_STANDARD: 设置 C 标准。CMAKE_CXX_FLAGS: 设置 C 编译选项。CMAKE_C_FLAGS: 设置 C 编译选项。CMAKE_EXE_LINKER_FLAGS: 设置可执行文件的链接选项。CMAKE_SHARED_LINKER_FLAGS: 设置共享库的链接选项。CMAKE_STATIC_LINKER_FLAGS: 设置静态库的链接选项。 示例

    创建一个可执行文件

    add_executable(my_app main.cpp)# 设置可执行文件的属性 set_target_properties(my_app PROPERTIESOUTPUT_NAME my_program # 输出文件名为 my_programOUTPUT_DIRECTORY \({CMAKE_BINARY_DIR}/bin # 输出到 bin 目录COMPILE_DEFINITIONS DEBUG_MODE # 定义 DEBUG_MODE 宏INCLUDE_DIRECTORIES \){CMAKE_SOURCE_DIR}/include # 添加头文件搜索路径LINK_LIBRARIES mylib # 链接 mylib 库 )# 创建一个共享库 add_library(mylib SHARED mylib.cpp)# 设置共享库的属性 set_target_properties(mylib PROPERTIESVERSION 1.0.0SOVERSION 1OUTPUT_NAME mylibOUTPUT_DIRECTORY \({CMAKE_BINARY_DIR}/libPOSITION_INDEPENDENT_CODE TRUE )SET_TARGET_PROPERTIES 是 CMake 中一个非常强大的工具它允许你精细地控制目标的构建过程和行为。通过合理地使用 SET_TARGET_PROPERTIES你可以构建出更加灵活、可配置和易于维护的项目。 理解并熟练运用 SET_TARGET_PROPERTIES 是编写高效 CMake 构建脚本的关键。建议查阅 CMake 官方文档以获取更详细的属性列表和使用方法。 16.文件安装INSTALL install 命令用于指定在项目安装时需要复制的文件、目录和目标例如库、可执行文件。它允许你将构建好的项目部署到指定的位置以便其他用户或系统可以使用。 语法 install([TARGETS target1 [target2 ...]][FILES file1 [file2 ...]][DIRECTORY dir1 [dir2 ...]][PROGRAMS program1 [program2 ...]][SCRIPT script1 [script2 ...]][EXPORT export_name][DESTINATION destination_dir][COMPONENT component_name][PERMISSIONS permissions][CONFIGURATIONS config1 [config2 ...]][RENAME old_name new_name][OPTIONAL][...])常用选项 TARGETS: 指定要安装的目标例如库、可执行文件。FILES: 指定要安装的文件。DIRECTORY: 指定要安装的目录。DESTINATION: 指定安装的目标目录。COMPONENT: 指定安装的组件用于更精细的安装控制。PERMISSIONS: 指定安装文件的权限。CONFIGURATIONS: 指定只在特定构建配置下安装。RENAME: 在安装时重命名文件。OPTIONAL: 如果指定的文件或目标不存在则忽略安装。 说明 目录结构 project/ ├── CMakeLists.txt ├── libA/ │ ├── include/ │ │ └── libA.h │ └── src/ │ └── libA.cpp ├── libB/ │ ├── include/ │ │ └── libB.h │ └── src/ │ └── libB.cpp └── libC/├── include/│ └── libC.h└── src/└── libC.cppCMakeList.txt cmake_minimum_required(VERSION 3.10) project(Example)# libA add_library(libAsrc/libA/src/libA.cpp ) target_include_directories(libAPUBLIC\)BUILD_INTERFACE:\({CMAKE_CURRENT_SOURCE_DIR}/libA/include\)INSTALL_INTERFACE:include )# libB add_library(libBsrc/libB/src/libB.cpp ) target_link_libraries(libBPUBLIClibA ) target_include_directories(libBPUBLIC\(BUILD_INTERFACE:\){CMAKE_CURRENT_SOURCE_DIR}/libB/include\(INSTALL_INTERFACE:include )# libC add_library(libCsrc/libC/src/libC.cpp ) target_link_libraries(libCPRIVATElibB ) target_include_directories(libCPRIVATE\)BUILD_INTERFACE:\({CMAKE_CURRENT_SOURCE_DIR}/libC/include\)INSTALL_INTERFACE:include )# 可执行文件 add_executable(main src/main.cpp) target_link_libraries(mainPRIVATElibC )# 安装规则 set(CMAKE_INSTALL_PREFIX \({CMAKE_BINARY_DIR}/install)install(TARGETS libA libB libCDESTINATION lib )install(TARGETS mainDESTINATION bin )install(DIRECTORY libA/include/ libB/include/ libC/include/DESTINATION include )解释 set(CMAKE_INSTALL_PREFIX \){CMAKE_BINARY_DIR}/install): 设置安装前缀即安装的根目录。这里我们将其设置为构建目录下的 install 文件夹。install(TARGETS libA libB libC DESTINATION lib): 安装 libA, libB 和 libC 库到 lib 目录下。install(TARGETS main DESTINATION bin): 安装 main 可执行文件到 bin 目录下。install(DIRECTORY libA/include/ libB/include/ libC/include/ DESTINATION include): 安装 libA, libB 和 libC 的头文件目录到 include 目录下。 编译和安装 在 project 目录下创建一个 build 目录mkdir build进入 build 目录cd build运行 CMakecmake ..编译make安装make install 安装后的目录结构在 build/install 目录下 install/ ├── bin/ │ └── main ├── include/ │ ├── libA.h │ ├── libB.h │ └── libC.h └── lib/├── liblibA.so (或 liblibA.dylib 或 liblibA.a)├── liblibB.so (或 liblibB.dylib 或 liblibB.a)└── liblibC.so (或 liblibC.dylib 或 liblibC.a)可执行文件 main 被安装到了 bin 目录下。库文件 libA, libB 和 libC 被安装到了 lib 目录下。头文件 libA.h, libB.h 和 libC.h 被安装到了 include 目录下。 一些用法举例 安装单个文件 install(FILES my_config.ini DESTINATION etc)安装目录并保留目录结构 install(DIRECTORY data/ DESTINATION share/data)安装脚本 install(PROGRAMS my_script.sh DESTINATION bin)安装时重命名文件 install(FILES my_config.ini DESTINATION etc RENAME my_app_config.ini)指定安装权限 install(PROGRAMS my_script.sh DESTINATION bin PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ )install 命令是 CMake 中非常重要的一个命令它允许你定义如何将构建好的项目部署到指定的位置。通过灵活使用 install 命令的各种选项你可以实现复杂的安装需求。 17.CMake常用路径说明 以下是一些在 CMakeLists.txt 中常用的默认路径变量主要针对 Linux 环境但很多也适用于其他 Unix-like 系统以及它们的含义和常见用法 核心安装路径变量: CMAKE_INSTALL_PREFIX: 含义: 安装路径的前缀通常是 /usr, /usr/local, 或自定义路径安装根目录所有路径均基于此目录展开。默认值: 通常是 /usr/local。用法: 所有其他安装路径变量都基于此路径。示例: 
    cmake -DCMAKE_INSTALL_PREFIX/opt/my_app .. (在配置时指定安装前缀) CMAKE_INSTALL_BINDIR: 含义: 安装可执行文件的目录用户可执行文件目录如 myapp。默认值: bin (相对于 CMAKE_INSTALL_PREFIX)例如 /usr/local/bin。用法: 用于 install(TARGETS … DESTINATION …) 命令。示例: 
    install(TARGETS my_app DESTINATION \({CMAKE_INSTALL_BINDIR}) CMAKE_INSTALL_SBINDIR: 含义: 系统管理员可执行文件目录。默认值: sbin (相对于 CMAKE_INSTALL_PREFIX)例如 /usr/local/sbin。用法: 用于 install(TARGETS ... DESTINATION ...) 命令。示例: 同CMAKE_INSTALL_BINDIR:略。 CMAKE_INSTALL_LIBDIR: 含义: 安装库文件的目录。默认值: lib (相对于 CMAKE_INSTALL_PREFIX)例如 /usr/local/lib。用法: 用于 install(TARGETS ... DESTINATION ...) 命令。示例:  install(TARGETS mylib DESTINATION \){CMAKE_INSTALL_LIBDIR}) CMAKE_INSTALL_INCLUDEDIR: 含义: 安装头文件的目录。默认值: include (相对于 CMAKE_INSTALL_PREFIX)例如 /usr/local/include。用法: 用于 install(FILES … DESTINATION …) 命令。示例: 
    install(FILES myheader.h DESTINATION \({CMAKE_INSTALL_INCLUDEDIR}) CMAKE_INSTALL_DATADIR: 含义: 安装数据文件的目录。默认值: share (相对于 CMAKE_INSTALL_PREFIX)例如 /usr/local/share。用法: 用于 install(FILES ... DESTINATION ...) 命令。示例:  install(FILES myconfig.ini DESTINATION \){CMAKE_INSTALL_DATADIR}) CMAKE_INSTALL_DOCDIR: 含义: 安装文档文件的目录。默认值: share/doc (相对于 CMAKE_INSTALL_PREFIX)例如 /usr/local/share/doc。用法: 用于 install(FILES … DESTINATION …) 命令。示例: 
    install(FILES README.md DESTINATION \({CMAKE_INSTALL_DOCDIR}) CMAKE_INSTALL_SYSCONFDIR: 含义: 安装系统配置文件的目录。默认值: etc (相对于 CMAKE_INSTALL_PREFIX)例如 /usr/local/etc。用法: 用于 install(FILES ... DESTINATION ...) 命令。示例:  install(FILES myconfig.conf DESTINATION \){CMAKE_INSTALL_SYSCONFDIR}) 构建路径相关变量: CMAKE_BINARY_DIR: 含义: 构建目录的绝对路径如build。默认值: 通常是你在执行 cmake 命令时指定的构建目录。用法: 用于引用构建过程中生成的文件。示例: 
    message(Build directory: \({CMAKE_BINARY_DIR}) CMAKE_SOURCE_DIR: 含义: 源代码目录的绝对路径(项目根目录)。默认值: 通常是包含顶层 CMakeLists.txt 文件的目录。用法: 用于引用源代码中的文件。示例:  include_directories(\){CMAKE_SOURCE_DIR}/include) CMAKE_CURRENT_BINARY_DIR: 含义: 当前正在处理的 CMakeLists.txt 文件所在的构建目录。默认值: 相对于 CMAKE_BINARY_DIR 的路径。用法: 用于引用当前构建目录下的文件。示例: 
    add_executable(my_app \({CMAKE_CURRENT_BINARY_DIR}/main.o) CMAKE_CURRENT_SOURCE_DIR: 含义: 当前正在处理的 CMakeLists.txt 文件所在的源代码目录。默认值: 相对于 CMAKE_SOURCE_DIR 的路径。用法: 用于引用当前源代码目录下的文件。示例:  add_executable(my_app \){CMAKE_CURRENT_SOURCE_DIR}/main.cpp) PROJECT_BINARY_DIR项目构建目录等同于 CMAKE_BINARY_DIRPROJECT_SOURCE_DIR项目源码目录等同于 CMAKE_SOURCE_DIR 其他常用路径变量: CMAKE_MODULE_PATH: 含义: CMake 模块的搜索路径列表。默认值: CMake 默认模块路径。用法: 用于查找自定义的 CMake 模块。示例: 
    list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules) CMAKE_PREFIX_PATH: 含义: 查找依赖库的路径列表。默认值: 系统默认路径。用法: 用于 find_package 命令。示例: 
    list(APPEND CMAKE_PREFIX_PATH /opt/my_libs) CMAKE_LIBRARY_PATH: 含义: 链接器搜索库文件的路径列表。默认值: 系统默认路径。用法: 用于指定链接器搜索库的路径。示例: 
    list(APPEND CMAKE_LIBRARY_PATH /opt/my_libs/lib) CMAKE_INCLUDE_PATH: 含义: 编译器搜索头文件的路径列表。默认值: 系统默认路径。用法: 用于指定编译器搜索头文件的路径。示例: 
    list(APPEND CMAKE_INCLUDE_PATH /opt/my_libs/include) 修改安装路径 在某些情况下我们并不想安装到默认路径可以通过修改安装路径前缀来达到。其他路径修改也可以参考。 临时修改命令行覆盖 在运行 cmake 命令时通过 -D 参数直接指定新的路径优先级最高 cmake -B build -DCMAKE_INSTALL_PREFIX/your/custom/path 永久修改修改 CMakeLists.txt

    在 CMakeLists.txt 开头附近添加

    语法set(VARIABLE VALUE CACHE TYPE Description FORCE)

    set(CMAKE_INSTALL_PREFIX /your/default/path CACHE PATH Installation directory FORCE) CACHE PATH将变量标记为可缓存用户可通过命令行修改。 FORCE强制覆盖已有值确保你的默认值生效。
    注意 可配置性: 这些变量通常可以通过 CMake 的命令行选项例如 -DCMAKE_INSTALL_PREFIX/opt/my_app或在 CMakeLists.txt 文件中进行修改。相对路径: 在 install 命令中DESTINATION 参数可以使用相对路径这些路径是相对于 CMAKE_INSTALL_PREFIX 的。平台差异: 虽然这些变量在 Linux 环境下很常见但在其他操作系统如 Windows 或 macOS上它们的默认值可能会有所不同。查阅文档: CMake 的官方文档提供了最权威和详细的变量信息建议查阅以获取更全面的了解。