2014-12-03 146 views

回答

11

在当前CMake的释放:

一些错误检查add_dependencies导致调用Target->AddUtility()后。 x被添加到utilities的列表中my-lib

target_link_libraries不会导致对AddUtility的调用,但它会将参数添加到LINK_LIBRARIES目标属性中。

后来,LINK_LIBRARIES目标属性的内容和实用程序列表都用于计算目标在cmComputeTargetDepends中的依赖关系。

目标中的实用程序列表在配置时无法查询,并且仅在生成时使用,因此使用add_dependencies以及已添加的库参数是target_link_libraries是多余的。

-1

它用于顶级目标相互依赖的情况。也就是说,如果X为您添加到您的项目(在顶层),一个东西与

add_library(x x.c y.c z.c) 

你要告诉CMake的它。你可以用add_dependencies这样做。

+0

我没有downvote链接,但我的问题的关键是** add_dependencies是否**是_redundant_ ** target_link_libraries后**。 – 2014-12-04 08:53:24

+0

好吧,我明显得到了这个错误。无论如何,我不可能像@seveire那样深入地评论,所以非常感谢。 – sebkraemer 2015-01-19 12:38:48

1

我不知道在什么特别的你是有趣......

但从概念点 - 我认为你是对是字节

的废物来看 cmake的文档点 - 你应该更喜欢这样做,以保证正确的构建顺序

根据文档target_link_libraries,add_dependencies概念在意识形态分裂。分裂depencies和链接器选项的 这样的想法,也坚持在Makefile文件格式GNU make工具

target_link_libraries

..Specify库或标志链接给定的目标时使用..

add_dependencies

...让顶级依赖于其它顶级目标,以确保 ,他们之前建立...

在现代的cmake从3。*您可以省略add_dependencies,如果你将执行与别名目标

add_library(fooLib 1.cpp 2.cpp) 
add_library(my::fooLib ALIAS fooLib) 
... 
target_link_libraries(fooBin my::fooLib) 
相关问题