而对于非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...
各级子目录中无需使用target_include_directories()或者include_directories()了。如果此时查看详细的编译过程(make VERBOSE=1)就会发现编译过程是一大坨,很不舒服。 当然了,在最终子目录的 CMakeLists.txt 文件中,使用include_directories()和target_include_directories()的效果是相同的。 4. 目录划分 每一个目录都...
目标文件有INCLUDE_DIRECTORIES和INTERFACE_INCLUDE_DIRECTORIES两个属性,前者是对内头文件目录,只给自己用。后者是对外头文件目录,给别人用的。第二个参数不同取值的效果如下: INTERFACE 相当于只会搜索 INTERFACE_INCLUDE_DIRECTORIES目录 PUBLIC 相当于两个目录都会搜索 PRIVATE 相当于只会搜索INCLUDE_DIRECTORIES 对于上面...
target_include_directories target_include_directories(<target> [SYSTEM] [AFTER|BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...]) 1. 2. 3. 指定编译给定目标时要使用的include目录。名为< target >的必须由add_executable()或add_library()等命令创建的...
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程序...
简介:[√]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...
target_link_libraries(hello-world INTERFACE hello) target_include_directories(hello-world INTERFACE hello) PUBLIC:公开的。PUBLIC = PRIVATE + INTERFACE。生成 libhello-world.so 时,在 hello_world.c 和 hello_world.h 中都包含了 hello.h。并且 main.c 中也需要使用 libhello.so 提供的功能。那么在 hel...
2.1.10 target_include_directories 作用:指定 target 包含的头文件路径(相当于指定g++编译器-I参数) 语法:target_include_directories(target [INTERFACE|PUBLIC|PRIVATE] dir1 dir2 …) 其中,target为库文件或可执行文件 PRIVATE:私有的 INTERFACE:接口
include_directories会对当前CMakeLists.txt文件的目标文件生效,并会通过add_subdirectory调用传递到子目录;target_include_directories则针对指定的目标文件生效。 target_include_directories对于指定目标添加的目录,有三种范围可选,PUBLIC、PRIVATE和INTERFACE。INTERFACE和PUBLIC会添加到<target>的INTERFACE_INCLUDE_DIRECTORIES属...
这三种权限也适用于target_include_directories和target_compile_definitions等命令,决定了目标或其消费者如何继承这些属性。 3. PRIVATE权限详解 3.1 定义与用途 在CMake中,PRIVATE权限是我们在链接库时经常会遇到的一个关键词。简而言之,当我们说一个库是以PRIVATE方式链接的,我们意味着这个库只对当前目标有意义,而不...