是否有任何用例
target_link_libraries(my-lib x y z)
add_dependencies(my-lib x) # this is not just a waste of bytes?
Run Code Online (Sandbox Code Playgroud)
如果是这样,有人可以解释它会是什么吗?
ste*_*ire 23
在当前的CMake版本中:
经过一些错误检查后add_dependencies调用结果Target->AddUtility().x被添加到列表中的实用程序进行my-lib.
target_link_libraries不会导致调用AddUtility,但它会将参数添加到LINK_LIBRARIEStarget属性.
稍后,LINK_LIBRARIES目标属性的内容和实用程序列表都用于计算目标的依赖关系cmComputeTargetDepends.
在配置时无法查询目标中的实用程序列表,并且仅在生成时使用,因此使用add_dependencies带有已添加的库的参数target_link_libraries是多余的.
我不知道你对什么特别感兴趣......
从概念的角度来看——我认为你是对的。这是一种字节的浪费。
从 CMake 文档的角度来看——您应该更喜欢make so 以保证正确的构建顺序。
根据文档 target_link_libraries,add_dependencies 概念在意识形态上是分裂的。GNU make工具中的 Makefile 格式也保留了这种拆分依赖项和链接器选项的想法。
..指定链接给定目标时要使用的库或标志。
...使顶级 <target> 依赖于其他顶级目标,以确保它们在 <target> 之前构建...
在 3.* 的现代 CMake 中,如果您将执行与别名目标的链接,则可以省略 add_dependencies:
add_library(fooLib 1.cpp 2.cpp)
add_library(my::fooLib ALIAS fooLib)
...
target_link_libraries(fooBin my::fooLib)
Run Code Online (Sandbox Code Playgroud)