PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> ) In this example, target_include_directories adds two include directories to the build of the MyLibrary target: The include directory is added as a PUBLIC include directo...
install(FILES ${CMAKE_SOURCE_DIR}/../lib/build/config.h DESTINATION ${CMAKE_SOURCE_DIR}/../include) 然后在build目录下运行安装,如下: benggee@benggee:~/app/c-program/cmake/build$ cmake --install . -- Install configuration: "" -- Installing: /home/benggee/app/c-program/cmake/src/....
install(FILES ${CMAKE_SOURCE_DIR}/../lib/build/config.h DESTINATION ${CMAKE_SOURCE_DIR}/../include) 然后在build目录下运行安装,如下: benggee@benggee:~/app/c-program/cmake/build$ cmake --install . -- Install configuration: "" -- Installing: /home/benggee/app/c-program/cmake/src/....
包含路径的使用要求对于build树和instal树通常是不太一样的。BUILD_INTERFACE和INSTALL_INTERFACE生成表达式可以用来描述不同的使用要求。 target_include_directories(mylibPUBLIC$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>$<INSTALL_INTERFACE:include/mylib># <prefix>/include/mylib) 2. 实例 ...
PRIVATE|PUBLIC|INTERFACE:动态库的访问权限,默认为PUBLIC 如果该动态库不是系统提供的(自己制作或者使用第三方提供的静态库)可能出现动态库找不到的情况,此时可以将 动态库的路径也指定出来: link_directories(<lib path>) 测试库文件链接 静态库 文件结构 .├── CMakeLists.txt ├── build ├── lib ...
添加了 INTERFACE 库类型 支持项目版本关键字 VERSION 导出构建树更容易 括号参数和支持注释(未广泛使用) 以及其他很多改进 CMake 3.1:支持 C++11 和编译特性 支持C++11 的第一个版本,并针对 CMake 3.0 新特性进行了修复。如若需要使用旧版 CMake,该版本推荐作为最低。
...INTERFACE将源值追加到目的地的接口属性。 PUBLIC追加到目的地的两个属性。 正如我们之前讨论的,接口属性只用于将属性传播到链的更低层,目的目标在构建过程中不会使用它们。...这不如预编译头文件优雅,但这是一个选项。 这种构建方式的第二个好处是,优化器现在可以更大规模地作用,并优化所有捆绑源之间的跨...
为了方便,我们将其放置在与test.cpp相同的目录中,但我们也可以选择不同的位置,并使用target_include_directories指示该位置。另一种方法是将头文件包装成一个INTERFACE库。这可以按照 Catch2 文档中的说明进行(https://github.com/catchorg/Catch2/blob/master/docs/build-systems.md#cmake):...
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>) set(OUTPUT_DIR "${CMAKE_BINARY_DIR}/output") set(INSTALL_DIR "${OUTPUT_DIR}/my_library") set(INSTALL_LIB_DIR "${INSTALL_DIR}/lib") set(INSTALL_INC_DIR "${INSTALL_DIR}/include") ...
COMPATIBLE_INTERFACE_STRING LIB_VERSION )add_library(lib1Version3 SHARED lib1_v3.cpp)set_property(TARGETlib1Version3 PROPERTY INTERFACE_LIB_VERSION3)add_executable(exe1 exe1.cpp)target_link_libraries(exe1 lib1Version2)# LIB_VERSION will be "2"add_executable(exe2 exe2.cpp)target_link_libraries...