其实private/public 解决的是指示问题,本质上可以使用public 来解决, 可以减少坑。 下面是target_link_libraries中的解释,不想看英文的,直接拉到最后。 Link Inheritance Similarly, for anytarget, in the linking stage, we would need to decide, given theitemto be linked, whether we have to put theitemi...
INTERFACE,PUBLIC和PRIVATE关键字用于指定以下参数的作用域(scope)。PRIVATE和PUBLIC项将填充<target>的INCLUDE_DIRECTORIES属性。PUBLIC和INTERFACE项将填充<target>的INTERFACE_INCLUDE_DIRECTORIES属性。下面的参数指定包含目录。 允许在IMPORTED targets上指定INTERFACE项。 重复调用相同的<target>会按调用顺序追加项。 如果指定...
网上关于 target_link_libraries 中的 PRIVATE, PUBLIC , INTERFACE 的解释大部分是错的,而且不是一般的错,是胡说。 因为这三个属性在不同的命令中使用时意义不同,有很多是从target_include_directories中抄来的。 以下的解释主要场景是linux中,windows不存在这种关系,无需考虑。 我们来解释下,假设我们有一个程序 ...
target_link_libraries(bar INTERFACE foo)编译发现bar.cpp: undefined reference to `foo()',bar找不到foo()这个符号,但是main能够找到foo(),也就是库foo通过bar传递给main,但是bar自身并不能使用这个库。 target_link_libraries(bar foo)如果省略,默认为PUBLIC。 以上是我查看别人博客进行的测试,加深理解,如果存...
如果目标的头文件中包含了依赖的头文件(源文件间接包含),那么这里就是PUBLIC 如果目标仅源文件中包含了依赖的头文件,那么这里就是PRIVATE 如果目标的头文件包含依赖,但源文件未包含,那么这里就是INTERFACE https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements...
target_link_libraries(target_name [PRIVATE|PUBLIC|INTERFACE] library_name1 library_name2 ...) 其中: target_name是目标名称,可以是可执行文件、库或模块。 PRIVATE、PUBLIC和INTERFACE是可选的关键字,用于指定链接库的属性。具体含义如下: oPRIVATE:仅将库链接到目标自身。 oPUBLIC:将库链接到目标自身,并将库...
target_name是要链接库的目标的名称,例如一个可执行文件或一个库。PRIVATE,PUBLIC和INTERFACE是可选的...
If your header files but not your source files include the headers of another library, then it is anINTERFACEdependency. Other build properties of PUBLIC and INTERFACE dependencies are propagated to consuming libraries.http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transiti...
target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> item1 [item2 ...]) <target> 是你想要链接库的目标名称,例如一个可执行文件或库。 <PRIVATE|PUBLIC|INTERFACE> 是关键字,用于指定链接的可见性。PRIVATE 表示链接仅对目标自身有效,PUBLIC 表示链接对目标自身及其依赖...
target_link_libraries中的PRIVATE INTERFACE PUBLIC CMake target_link_libraries Interface Dependencies - Stack Overflow CMake的链接选项:PRIVATE,INTERFACE,PUBLIC - 知乎 If you are creating a shared library and your source cpp files #include the headers of another library (Say, QtNetwork for example),...