target_include_directories中PRIVATE的PUBLIC区别 private protected public 区别,第一:private,public,protected访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2
PRIVATE传递 使用上面的CMake配置进行测试,得到结果如下。由于使用PRIVATE属性,头文件和链接库都不能传递...
那么在 hello-world/CMakeLists.txt 中应该写入: target_link_libraries(hello-world PUBLIC hello)target_include_directories(hello-world PUBLIC hello) 实际上,这三个关键字指定的是目标文件依赖项的使用范围(scope)或者一种传递(propagate)。官方说明 可执行文件依赖 libhello-world.so, libhello-world.so 依赖 ...
当然了,在最终子目录的 CMakeLists.txt 文件中,使用 include_directories() 和 target_include_directories() 的效果是相同的。 而使用 target_include/link_directories() 每一个目录都是一个模块,目录内部应将对外和对内的头文件进行区分,由模块的调用者决定模块是否被传递(PRIVATE,INTERFACE,PUBLIC)。 测试工程目...
include_directories(${CMAKE_CURRENT_LIST_DIR}) 这种非Target的命令会影响全局的编译器,所以在大型项目里面,推荐使用cmake现代的target api。 举例: target_include_directories(lib1 PRIVATE ${CMAKE_CURRENT_LIST_DIR})target_link_libraries(app PRIVATE lib1) ...
以 target_include_directories() 命令为例, include_directories(dir) 是一个全局设置,其会将 dir 添加到当前CMakeLists文件中每个目标的 INCLUDE_DIRECTORIES 属性中。即当前CMakeLists文件其下所有的子目录都会添加dir目录。 因此, 建议使用有 target 的命令来减少不必要或多余的目录包含和链接。
()<<std::endl;return0;}---CMakeLists.txt---cmake_minimum_required(VERSION3.16)project(foobar)set(CMAKE_SKIP_RPATHTRUE)include_directories(${CMAKE_SOURCE_DIR})add_library(fooSHAREDfoo.cpp)add_library(barSHAREDbar.cpp)target_link_libraries(barPUBLICfoo)add_executable(appapp.cpp)target_link...
target_include_directories() 的功能完全可以使用 include_directories() 实现。但是我还是建议使用 target_include_directories()。为什么?保持清晰! include_directories(header-dir) 是一个全局包含,向下传递。什么意思呢?就是说如果某个目录的 CMakeLists.txt 中使用了该指令,其下所有的子目录默认也包含了header-di...
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_minimum_required(VERSION3.16)project(Link_Test)set(CMAKE_SKIP_RPATH TRUE)set(CMAKE_CXX_STANDARD14)set(CMAKE_CXX_STANDARD_REQUIRED on)#头文件包含目录include_directories(${CMAKE_CURRENT_LIST_DIR})#生成的动态库add_library(foo SHARED foo.cpp)add_library(bar SHARED bar.cpp)#bar 链接 foo...