2016-08-24 82 views
0

我想用CMake交叉編譯一個庫。目標平臺是非標準的。該庫有幾個try_compile命令。特別是CheckTypeSize.cmake中的失敗。要編譯成功,我需要更改那些try_compile命令使用的標誌和鏈接庫(並且我不想修改CMake安裝)。看起來好像在該模塊內使用了(未記錄的)CMAKE_REQUIRED_LIBRARIESCMAKE_REQUIRED_FLAGS。在工具鏈文件,我做的:cmake:CMAKE_REQUIRED_FLAGS和以「/ D」開頭的標誌

set(CMAKE_REQUIRED_FLAGS "/DLL") 

不幸的是,我想設置與/D開始的標誌(在這種情況下/DLL)。當我這樣做時,變量被翻譯成/D LL。有什麼方法可以向CMake表明該字符串不應該被解析爲一個編譯定義?

+0

向我們展示一些最起碼的代碼,你在使用已無證東西模塊? – usr1234567

+0

好吧,我的意思是CMAKE_REQUIRED_FLAGS沒有記錄在公共文檔中,只在那些cmake(內部)模塊文件的開頭。 – MuertoExcobito

+0

我的建議是更新到CMake 3.6並添加'set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)'。另見[這裏](http://stackoverflow.com/questions/38700198/how-to-partially-disabling-cmake-cc-custom-compiler-checking)和[這裏](http://stackoverflow.com/questions/37931068 /告訴-的cmake使用的-C編譯器換C-文件 - 未來從 - cmake的)。 – Florian

回答

2

談到我的意見爲答案

請不要使用內部的CMake命令。我在你的情況建議 - try_compile不是在交叉編譯環境中工作,並且鏈接器拋出的錯誤 - 是升級到CMake的3.6,並添加

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) 

隨後的CMake的try_compile將只嘗試靜態庫鏈接(而不是可執行)。

參考