建设网站技术人员先进事迹,做淘宝的网站,寮步网站建设 优帮云,诸城网站建设公司文章目录 cmake预设变量预定义变量表格预设变量详解其他预定义变量#xff1a;设置CMAKE预定义变量 set()设置 项目构建设置编译选项 编译链 编译器 设置 项目输出 添加编译选项add_compile_optionsadd_definitions(-DDEBUG -DMYDEFINE) 添加宏定义 搜寻添加 源文件 .c .… 文章目录 cmake预设变量预定义变量表格预设变量详解其他预定义变量设置CMAKE预定义变量 set()设置 项目构建设置编译选项 编译链 编译器 设置 项目输出 添加编译选项add_compile_optionsadd_definitions(-DDEBUG -DMYDEFINE) 添加宏定义 搜寻添加 源文件 .c .cpp .saux_source_directoryfile(GLOB ) 搜索添加 头文件 .h .hpptarget_include_directoriestarget_link_directoriesinclude_directorieslink_directories需要注意的是 创建构建目标add_library 静态/动态/组件库add_executable 可执行文件add_subdirectory :纳入子CMake构建配置target_link_libraries 设置目标属性set_target_properties设置的属性set_propertyPROPERTIES 导入静态/动态库文件 cmake预设变量
预定义变量表格
CMake 变量名描述CMAKE_SOURCE_DIR当前 CMakeLists.txt 所在的源码目录的根路径CMAKE_BINARY_DIR构建目录的根路径用于存放构建生成的可执行文件、库和其他输出CMAKE_CURRENT_SOURCE_DIR当前处理的 CMakeLists.txt 所在的源码目录路径CMAKE_CURRENT_BINARY_DIR当前处理的 CMakeLists.txt 所在的构建目录路径CMAKE_CURRENT_LIST_DIR当前处理的 CMakeLists.txt 文件的实际目录路径源码或构建CMAKE_CURRENT_LIST_LINE当前正在处理的 CMakeLists.txt 文件中的行号CMAKE_MODULE_PATH用于查找额外 CMake 模块.cmake 文件的搜索路径列表CMAKE_INCLUDE_CURRENT_DIR若设为 ON将在构建时自动将当前 CMakeLists.txt 目录添加到包含路径中CMAKE_LIBRARY_OUTPUT_DIRECTORY库文件的输出目录CMAKE_RUNTIME_OUTPUT_DIRECTORY可执行文件的输出目录
预设变量详解 CMAKE_CURRENT_SOURCE_DIR 它指定了当前正在处理的 CMakeLists.txt 文件所在的目录。当你在多级目录结构中使用 add_subdirectory() 时这个变量会随着上下文切换而变化总是指向当前 CMakeLists.txt 文件所在的路径。 PROJECT_SOURCE_DIR 这个变量代表了项目的顶层根源代码目录即包含初始 project() 命令的那个 CMakeLists.txt 文件所在的目录。 CMAKE_CURRENT_BINARY_DIR 表示当前 CMakeLists.txt 文件对应的构建目录在构建过程中这里的路径是指构建时产生的中间文件和目标文件的存放位置。 PROJECT_BINARY_DIR 同样代表项目顶层的构建目录也就是在项目根目录下执行 cmake 时生成的构建文件的父目录通常相对于 PROJECT_SOURCE_DIR它是一个独立的 build 目录。 CMAKE_BINARY_DIR 在单个顶级 CMake 构建中CMAKE_BINARY_DIR 等同于 PROJECT_BINARY_DIR但在多级构建配置中它指的是最外层或“顶级”构建目录。 CMAKE_SOURCE_DIR 这个变量类似于 PROJECT_SOURCE_DIR不过在多目录外部项目ExternalProject中可能有所不同一般情况下两者相同都指向项目根目录。 CMAKE_MODULE_PATH 用于搜索 CMake 模块的额外路径列表。 CMAKE_CURRENT_LIST_DIR 表示当前正在处理的 CMakeLists.txt 或 CMake 模块文件的实际物理路径。 CMAKE_CURRENT_LIST_FILE 包含当前正在执行的 CMakeLists.txt 或 CMake 模块文件的完整路径。
其他预定义变量 CMAKE_GENERATOR 当前使用的构建工具链如 “Unix Makefiles”、“MinGW Makefiles”、“Ninja” 等。 CMAKE_BUILD_TYPE 指定构建类型如 “Debug”、“Release” 等。 CMAKE_LANG_COMPILER 指定用于特定语言如 C、CXX的编译器路径。 CMAKE_SYSTEM_NAME, CMAKE_SYSTEM_VERSION, CMAKE_SYSTEM_PROCESSOR 描述目标系统的名称、版本和处理器架构。
以上这些变量在CMake中都是全局可用的可以帮助开发者灵活地处理不同层级的目录结构、构建选项以及系统相关的配置信息。此外还有许多其他的预定义变量具体可查阅CMake官方文档以获取完整列表及最新说明。
设置CMAKE预定义变量 set()
设置 项目构建
if(WIN32) set(CMAKE_GNUtoMS ON) endif(WIN32) # 如果是window平台,set(CMAKE_BUILD_RPATH “${CMAKE_SOURCE_DIR}/build” ) 构建目录 ./buildset(CMAKE_BUILD_TYPE Debug) 设置编译选项 编译链 编译器
set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED True)set(CMAKE_C_COMPILER “gcc”)set(CMAKE_CXX_COMPILER “g”) 设置 项目输出
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY)set(CMAKE_LIBRARY_OUTPUT_DIRECTORY)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
添加编译选项
add_compile_options
add_compile_options(-Wall -Wextra -pedantic ) add_definitions(-DDEBUG -DMYDEFINE) 添加宏定义 搜寻添加 源文件 .c .cpp .s
aux_source_directory
aux_source_directory:该命令可以搜索指定目录第一个参数下的所有源文件将源文件的列表保存到指定的变量第二个参数。 aux_source_directory(. MATH_SRC) file(GLOB )
file(GLOB ):该命令可以搜索指定目录第一个参数下的所有源文件将源文件的列表保存到指定的变量第二个参数。 file(GLOB MATH_SRC *.cpp) 搜索添加 头文件 .h .hpp
target_include_directories
target_include_directories(target_name PRIVATE/PUBLIC/INTERFACE Directory1 Directory2 …)这可以确保自定义路径只应用于特定的目标并使得相关路径不会泄漏到其他目标中。
target_link_directories
target_link_directories(target_name PRIVATE/PUBLIC/INTERFACE Directory1 Directory2 …)这可以确保自定义路径只应用于特定的目标并使得相关路径不会泄漏到其他目标中。
include_directories
添加头文件包含路径 全局include_directories(path1 path2 …)
link_directories
添加头文件包含路径 全局link_directories(path1 path2 …)
需要注意的是
尽量避免在 CMake 中使用 include_directories 和 link_directories 命令来处理第三方库的头文件和链接库路径。更好的做法是使用 find_package 命令或编写 Find 模块来查找和链接第三方库这样可以更好地管理依赖关系和跨平台兼容性。
创建构建目标
add_library 静态/动态/组件库 add_library( [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] […]) add_executable 可执行文件 add_executable( [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [source1] [source2 …]) add_subdirectory :纳入子CMake构建配置
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM]
)add_subdirectory( directory ) 用于将一个子目录及其内部的CMake构建配置纳入当前项目的构建过程。这个命令允许您组织大型项目为多个独立的子项目或模块每个子项目都有自己的CMakeLists.txt文件它们共同构成整个项目的构建规则。 source_dir必填参数指定包含子目录CMakeLists.txt文件的路径。可以是相对路径相对于当前CMakeLists.txt文件所在目录或绝对路径。CMake将递归地处理指定目录下的CMakeLists.txt文件构建该子目录内的目标。 binary_dir可选参数指定子目录构建产物如编译后的对象文件、库文件和可执行文件存放的目录。如果未指定CMake将默认在当前构建目录下创建一个与source_dir同名的子目录作为binary_dir。如果提供的是相对路径它将相对于当前构建目录计算。 EXCLUDE_FROM_ALL可选布尔标记如果设置该子目录中的目标将不会被默认构建。用户必须明确指定这些目标才能进行构建。这对于包含可选组件、测试套件或示例代码等的子目录非常有用可以避免不必要的构建开销。
target_link_libraries target_link_libraries(targetPRIVATE|PUBLIC|INTERFACE items...[PRIVATE|PUBLIC|INTERFACE items...]...[LINK_INTERFACE_LIBRARIES items...][LINK_PRIVATE items...][LINK_PUBLIC items...][LINK_INTERFACE_MULTIPLICITY library count...]
)负责将库文件、其他目标如静态库或共享库以及链接标志与给定的目标通常是可执行文件或库关联起来。可以清晰地定义项目中各个组成部分之间的依赖关系确保编译器在构建目标时能正确链接所需的库文件。
设置目标属性
set_target_properties设置的属性
set_target_properties(${module_name} PROPERTIESproperty1 value1property2 value2.....
)
set_target_properties(my_target PROPERTIES COMPILE_DEFINITIONS MY_DEFINITIONON)set_property
set_property([GLOBAL | DIRECTORY | TARGET target-name |SOURCE source-file | TEST test-name |INSTALL install-target | CACHE | ENVIRONMENT]PROPERTY property-name [value1 [value2 ...]]
)
set_property(TARGET my_target PROPERTY COMPILE_DEFINITIONS MY_DEFINITIONON)set_target_properties 语法更紧凑sett_property 作用范围更丰富
PROPERTIES
OUTPUT_NAME 输出文件名字PREFIX 输出文件前缀 ARCHIVE_OUTPUT_DIRECTORY 输出导入库路径 dll.aLIBRARY_OUTPUT_DIRECTORY 输出库文件库路径 .a .libRUNTIME_OUTPUT_DIRECTORY 输出可执行文件路径 .exe .dll
导入静态/动态库文件
https://zhuanlan.zhihu.com/p/373363335