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