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

Is it possible to change library linking order in cmake

本文关键字:链接 顺序 cmake 是否      更新时间:2023-10-16

当我执行make时,它会执行类似gcc blah.o -lXtst -lX11的东西,这会导致类似undefined reference to XTestFakeButtonEvent的错误。我发现了很多答案,他们都说这是因为链接顺序错误。使用普通gcc时很容易更改顺序,但是make呢?

这里有两个答案,一个懒惰的答案和一个正确的答案。

惰性是,指定要target_link_libraries依赖项的顺序是它们在命令行上出现的顺序。

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

更好的解决方案是显式建模所有依赖项。也就是说,将每个依赖项建模为其自己的目标(如果处理预编译的依赖项,则可能使用导入的目标),然后使用 target_link_librariesadd_dependencies 正确建模目标间依赖项。如果您在整个项目中都这样做,您将(几乎)不必担心订单,因为 CMake 会为您处理它。

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