如果B link C时用public 指示, 当编译A时,就会检查到C中的符号没有实现,此时你就会知道要把C link到A来解决这个问题了。 其实private/public 解决的是指示问题,本质上可以使用public 来解决, 可以减少坑。 下面是target_link_libraries中的解释,不想看英文的,直接拉到最后。 Link Inheritance Similarly, for any...
所以,使用PRIVATE PUBLIC和INTERFACE就能控制是否将当前搜索路径传递给下一个目标。 PRIVATE就是不把当前的INCLUDE_DIRECTORIES 传递给INTERFACE_INCLUDE_DIRECTORIES 。 PUBLIC就是把当前的INCLUDE_DIRECTORIES 传递给INTERFACE_INCLUDE_DIRECTORIES 。 INTERFACE就是自己不使用当前的INCLUDE_DIRECTORIES ,但是把当前的INCLUDE_DIRECT...
其实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...
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), but your header files don't include QtNetwork...
默认为 PUBLIC。 <item>:要链接的库的名称。 这个命令的作用是将指定的库链接到目标目标中。可以使用多个 target_link_libraries 命令来链接多个库。每个命令可以指定不同的范围(PRIVATE、PUBLIC 或 INTERFACE),以便在不同的上下文中链接不同的库。 例如,假设有一个名为 my_target 的目标,并且要将其链接到名为 ...
target_link_libraries(bar PUBLIC foo) 链接为public,main函数正常调用foo(),bar中正常调用foo(),库foo链接给bar,同时foo也被传给了main。 target_link_libraries(bar PRIVATE foo) 编译,发现main.cpp: undefined reference to `foo()',main.cpp这个编译单元找不到foo()这个符号,库foo链接到bar就被终结了,bar...
target_name是要链接库的目标的名称,例如一个可执行文件或一个库。PRIVATE,PUBLIC和INTERFACE是可选的...
target_link_libraries(<target><PRIVATE|PUBLIC|INTERFACE> <item>...[<PRIVATE|PUBLIC|INTERFACE> <item>...]...) PUBLIC、PRIVATE 和 INTERFACE 范围关键字可用于在一个命令中指定链接依赖关系和链接接口。 紧跟在 PUBLIC 后的库和目标将被链接,并成为链接接口的一部分。紧跟在 PRIVATE ...
其中,target_name是目标文件的名称,PRIVATE、PUBLIC和INTERFACE是链接属性,用于指定链接库的可见性。library_name1、library_name2等是要链接的库文件的名称。 基于标志的target_link_libraries函数的常见应用场景包括: 链接第三方库:当项目需要使用第三方库时,可以使用target_link_libraries函数将这些库文件链接到目标文件...