PRIVATE_HEADER,PUBLIC_HEADER,和RESOURCE选项的功能是,在非苹果平台上,将后续的属性应用在待安装的一个FRAMEWORK共享库目标的相关文件上。这些选项定义的规则在苹果系统上会被忽略掉,因为相关的文件将会被安装到framework文件夹内的合适位置。参见PRIVATE_HEADER,PUBLIC_HEADER和RESOURCE目标属性中更为详细的解释。 可以指...
比如spdlog 的spdlog-config.cmake 就会定义 SPDLOG_NOT_HEADER_ONLY 这个宏为 PUBLIC。从而实现直接 #include <spdlog/spdlog.h> 时候是纯头文件,而 find_package(spdlog REQUIRED) 时却变成预编译链接库的版本。(嗯,其实不是 PUBLIC 而是 INTERFACE,因为伪对象没有实体) 和古代 CMake 做对比:为什么 PUBLIC 属性...
install(TARGETStargets...[EXPORT<export-name>][RUNTIME_DEPENDENCIESargs...|RUNTIME_DEPENDENCY_SET<set-name>][[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE|FILE_SET<set-name>][DESTINATION<dir>][PERMISSIONSpermissions...][CONFIGURATIONS[Debug|Release|...]][C...
PUBLIC_HEADER "Message.hpp;${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}/messageExport.h" MACOSX_RPATH ON ) 我们包含了标准的 CMake 模块GenerateExportHeader.cmake,并调用了generate_export_header函数。这将生成位于构建目录子目录中的messageExport.h头文件。我们很快将详细讨论这个函数和生成的头文件: 代码语...
[EXPORT <export-name>] [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE| PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE] [DESTINATION <dir>] [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT <component>] [NAMELINK_COMPONENT <component>] [OPTIONAL] [EXCLUDE_FROM_ALL] [NAME...
简介:【CMake中的链接权限详解 】深入理解CMake中PRIVATE、PUBLIC与INTERFACE的链接 1. 简介 (Introduction) 在我们的日常编程生涯中,构建系统是一个不可或缺的部分。它们负责将源代码转化为可执行的程序。而在众多的构建系统中,CMake无疑是最受欢迎的一个。但为什么CMake如此受欢迎呢?这背后的原因,与人类对于秩序...
PUBLIC: 当目标自身需要此链接库,或者其他目标链接了这个目标时使用。 其他目标链接这个目标时,它们会继承这个链接库。 对于静态库,这意味着当目标被构建或者其他目标链接了这个目标时,公共依赖项会被链接。 对于共享库和可执行文件,这意味着当它们被构建或者其他目标链接了这个目标时,公共依赖项会被链接。
include_directories(header-dir)是一个全局包含,向下传递。什么意思呢?就是说如果某个目录的 CMakeLists.txt 中使用了该指令,其下所有的子目录默认也包含了header-dir目录。 上述例子中,如果在顶层的 cmake-test/CMakeLists.txt 中加入: include_directories(hello-world)include_directories(hello-world/hello)incl...
PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE|FILE_SET <set-name>|CXX_MODULES_BMI] [DESTINATION <dir>] [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT <component>] [NAMELINK_COMPONENT <component>] [OPTIONAL] [EXCLUDE_FROM_ALL] ...
add_library(my_lib my_source.cpp my_header.h) # 指定库文件类型为静态库 set_target_properties(my_lib PROPERTIES OUTPUT_NAME "my_lib" ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" ) # 添加库文件需要的其他依赖项 target_link_libraries(my_lib PUBLIC other_lib) ...