是否可以在cmake中更改库链接顺序

时间:2016-01-20 12:37:12

标签: c++ cmake

当我执行make时,会执行gcc blah.o -lXtst -lX11之类的操作,导致undefined reference to XTestFakeButtonEvent之类的错误。我发现了很多答案,所有人都说这是因为错误的链接顺序。使用普通gcc时,更改订单很容易,但make怎么办?

2 个答案:

答案 0 :(得分:5)

这里有两个答案,一个是懒人,另一个是右边。

懒惰的是,您指定target_link_libraries的依赖关系的顺序是它们在命令行中出现的顺序。

然而,这并不是一个非常令人满意的答案,因为以这种方式跟踪依赖关系是相当繁琐的,并且非常容易出现维护错误。

更好的解决方案是明确地为所有依赖项建模。也就是说,将每个依赖项建模为自己的目标(如果处理预编译的依赖项,可能使用imported targets),然后使用target_link_librariesadd_dependencies正确建模目标间依赖项。如果你在整个项目中这样做,你(几乎)永远不必担心订单,因为CMake只是为你照顾它。

答案 1 :(得分:0)

解决方案是将 XTestFakeButtonEvent 作为 target_link_libraries 添加到发生未定义引用的库(模块) CMakeLists.txt 中。然后 cmake 将最终了解依赖项要求。