而对于非INTERFACE库,可以同时使用PUBLIC、PRIVATE和INTERFACE来目标设置不同的属性,例如: # 定义一个普通库add_library(MyLibrary src/my_library.cpp)# 设置包含目录target_include_directories(MyLibrary PRIVATE${CMAKE_SOURCE_DIR}/src/private_include PUBLIC${CMAKE_SOURCE_DIR}/src/public_include INTERFACE${C...
当然了,在最终子目录的 CMakeLists.txt 文件中,使用include_directories()和target_include_directories()的效果是相同的。 4. 目录划分 每一个目录都是一个模块,目录内部应将对外和对内的头文件进行区分,由模块的调用者决定模块是否被传递(PRIVATE,INTERFACE,PUBLIC)。 5. 参考: https://cmake.org/pipermail/c...
target_include_directories(mylib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib> $<INSTALL_INTERFACE:include/mylib> # <prefix>/include/mylib ) 创建可重定位包 请注意,不建议使用依赖项包含目录的绝对路径填充目标的INSTALL_INTERFACE或INTERFACE_INCLUDE_DIRECTORIES。这会将依赖项的包含...
include_directories会对当前CMakeLists.txt文件的目标文件生效,并会通过add_subdirectory调用传递到子目录;target_include_directories则针对指定的目标文件生效。 target_include_directories对于指定目标添加的目录,有三种范围可选,PUBLIC、PRIVATE和INTERFACE。INTERFACE和PUBLIC会添加到<target>的INTERFACE_INCLUDE_DIRECTORIES属...
引用大川搬砖:cmake:target_** 中的 PUBLIC,PRIVATE,INTERFACE 1. 指令说明 target_include_directories():指定目标包含的头文件路径。官方文档 target_link_libraries():指定目标链接的库。官方文档 target_compile_options():指定目标的编译选项。官方文档 ...
target_include_directories(libB PUBLIC include) add_executable(main main.cpp) target_link_libraries(main PUBLIC libB) 在这个例子中,libB以PRIVATE方式链接到libA,这意味着只有libB可以访问libA中的公共符号,而main程序不能直接访问它们。但是,由于main程序链接到libB,并且libB的公共符号是可见的,因此main程序...
target_link_libraries(hello-world INTERFACE hello) target_include_directories(hello-world INTERFACE hello) 1. 2. PUBLIC:公开的。PUBLIC = PRIVATE + INTERFACE。生成 libhello-world.so 时,在 hello_world.c 和 hello_world.h 中都包含了 hello.h。并且 main.c 中也需要使用 libhello.so 提供的功能。
简介:[√]cmake的链接属性PRIVATE、PUBLIC、INTERFACE权限控制 include_directories(${CMAKE_CURRENT_LIST_DIR}) 这种非Target的命令会影响全局的编译器,所以在大型项目里面,推荐使用cmake现代的target api。 举例: target_include_directories(lib1 PRIVATE ${CMAKE_CURRENT_LIST_DIR})target_link_libraries(app PRIVA...
include_directories()的影响范围最大,可以为CMakelists.txt后的所有项目添加头文件目录 一般写在最外层CMakelists.txt中影响全局 target_include_directories target_include_directories()的影响范围可以自定义。如加关键子PRIVATE或这PUBLIC。 一般引用库路径使用这个命令,作为外部依赖项引入进来,target是自己项目生成的li...
最近看了很多项目的代码,代码是用cmake编译的,由于各种库之间链接关系错综复杂,加上PRIVATE,PUBLIC,...