其实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...
在面向对象设计中,public private等关键字即是访问权限控制(相对于属性来说),同时也是继承类型(相对于类来说)的设置 同理,在cmake中,PRIVATE 、PUBLIC和 INTERFACE即是访问权限控制(相对于属性来说),同时也是继承类型(相对于target来说)的设置。 举个例子: 在面向对象中,假设我们有基类B和子类A。 对于类B来说,...
其实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...
target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <item>... [<PRIVATE|PUBLIC|INTERFACE> <item>...]... ) 参数解释: <target>:目标目标的名称。 <PRIVATE|PUBLIC|INTERFACE>:可选的关键词,用来指定链接库的范围,分别表示私有的、公开的或接口的链接库。默认为 PUBLIC。 <item>:要链接的库的名...
PUBLIC = PRIVATE + INTERFACE。生成 libhello-world.so 时,在 hello_world.c 和 hello_world.h 中都包含了 hello.h。并且 main.c 中也需要使用 libhello.so 提供的功能。那么在 hello-world/CMakeLists.txt 中应该写入: target_link_libraries(hello-world PUBLIC hello) target_include_directories(hello-...
另一个仅对其依赖目标可见target_link_libraries(my_app PUBLIC my_public_lib PRIVATE my_private_lib...
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_link_libraries(<target><LINK_PRIVATE|LINK_PUBLIC> <lib>...[<LINK_PRIVATE|LINK_PUBLIC> <lib>...]...) LINK_PUBLIC 和 LINK_PRIVATE 模式可用于在一个命令中指定链接依赖关系和链接接口。 此签名仅用于兼容性。请改用 PUBLIC 或 PRIVATE 关键字。
target_link_libraries为Target指定了需要链接的库 3 要点 在声明一个构建目标之后我们用target_开头的命令来添加构建该目标所需的资源和属性,诸如:源文件、包含目录、链接库、属性、编译标志等 这些命令中使用了PUBLIC、PRIVATE这样的标记,除此之外还有INTERFACE,它们细粒度的规定了所添加的资源或属性的可见性范围,其中...