是否有可能改变cmake中的库链接顺序
问题描述:
当我执行make
时,它执行类似gcc blah.o -lXtst -lX11
并导致类似undefined reference to XTestFakeButtonEvent
的错误。我发现了很多答案,他们都说这是因为链接顺序错误。当使用普通gcc
时很容易改变订单,但make
怎么办?是否有可能改变cmake中的库链接顺序
答
这里有两个答案,一个是懒惰的,一个是正确的。
懒惰的是,您指定依赖关系到target_link_libraries
的顺序是它们在命令行中的显示顺序。
然而,这不是一个非常令人满意的答案,因为以这种方式跟踪依赖关系相当单调乏味,而且很容易出现维护错误。
更好的解决方案是明确建模所有依赖关系。也就是说,将每个依赖关系建模为自己的目标(如果处理预编译的依赖关系,可能使用imported targets),然后使用target_link_libraries
或add_dependencies
正确建模目标间依赖关系。如果你在整个项目中都这么做,你几乎不需要担心订单,因为CMake只是为你处理它。
当然,在添加目标的依赖关系时更改顺序。你没有共享CMake代码,所以很难更明确。你不会改变make中的链接顺序,但是CMake – usr1234567