2017-08-14 36 views
0

我usiing一個FindLibDL CMake module其中,除其他事項外,決定了一些關於布爾值下劃線報告失敗:使我FindLibDL CMake的腳本不是一個虛假的布爾值

# ... 
CHECK_C_SOURCE_RUNS("#include <dlfcn.h> 
#include <stdlib.h> 
void testfunc() {} 
int main() { 
    testfunc(); 
    if (dlsym(0, \"_testfunc\") != (void*)0) { 
    return EXIT_SUCCESS; 
    } else { 
    return EXIT_FAILURE; 
    } 
}" LIBDL_NEEDS_UNDERSCORE) 

mark_as_advanced(LIBDL_INCLUDE_DIRS LIBDL_LIBRARIES LIBDL_NEEDS_UNDERSCORE) 

的事情是,如果底線不是CMake報告LIBDL_NEEDS_UNDERSCORE失敗。我該如何做到這一點,以便我仍然可以確定相同的價值,但仍不會將其報告爲失敗?

+0

如果不需要下劃線,則此var包含'FALSE'。有什麼問題?它按照你的意圖工作。 – arrowd

+0

@arrowd:問題是CMake的控制檯輸出告訴我一些失敗的東西,而沒有失敗,它只是'FALSE'。 – einpoklum

回答

1

由於@arrowd點,它是多麼CHECK_C_SOURCE_RUNS宏的工作方式:如果編譯後的程序返回0,它報告成功,否則報告失敗

如果你想要其他輸出,你可以直接使用try_run命令。


例如,與try_run可能實現這一目標的行爲:

  • 如果需要下劃線,輸出

    Check whether 'dl' requires underscore - Yes 
    
  • 如果不需要下劃線,輸出

    Check whether 'dl' requires underscore - No 
    
  • 如果期間發生錯誤檢查,輸出爲

    Check whether 'dl' requires underscore - Failed 
    
+0

哦,等等 - 「try_run」命令採用一個源文件;但我沒有源文件,我只有該模塊。你是否建議我創建一個臨時文件並使用它?還是有沒有涉及臨時文件的技巧? – einpoklum

+0

創建臨時源文件。 [CHECK_C_SOURCE_RUNS的實現](https://gitlab.kitware.com/cmake/cmake/blob/master/Modules/CheckCSourceRuns.cmake)正是這樣使用的。 – Tsyvarev