2016-01-20 44 views
2

當我執行make時,它執行類似gcc blah.o -lXtst -lX11並導致類似undefined reference to XTestFakeButtonEvent的錯誤。我發現了很多答案,他們都說這是因爲鏈接順序錯誤。當使用普通gcc時很容易改變訂單,但make怎麼辦?是否有可能改變cmake中的庫鏈接順序

+1

當然,在添加目標的依賴關係時更改順序。你沒有共享CMake代碼,所以很難更明確。你不會改變make中的鏈接順序,但是CMake – usr1234567

回答

4

這裏有兩個答案,一個是懶惰的,一個是正確的。

懶惰的是,您指定依賴關係到target_link_libraries的順序是它們在命令行中的顯示順序。

然而,這不是一個非常令人滿意的答案,因爲以這種方式跟蹤依賴關係相當單調乏味,而且很容易出現維護錯誤。

更好的解決方案是明確建模所有依賴關係。也就是說,將每個依賴關係建模爲自己的目標(如果處理預編譯的依賴關係,可能使用imported targets),然後使用target_link_librariesadd_dependencies正確建模目標間依賴關係。如果你在整個項目中都這麼做,你幾乎不需要擔心訂單,因爲CMake只是爲你處理它。