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