CMD#17: else 開始一個if語句塊的else部分。
else(expression)
參見if命令。
CMD#18: elseif 開始
if 塊的 elseif 部分。
elseif(expression)
參見if命令。
CMD#19: enable_language 支持某種語言
(CXX/C/Fortran/等)
enable_language(languageName [OPTIONAL] )
該命令打開了CMake對參數中指定的語言的支持。這與project命令相同,但是不會創建任何project命令會產生的額外變量。可以選用的語言的類型有CXX,C,Fortran等。如果指定了OPTIONAL選項,用CMAKE_<languageName>_COMPILER_WORKS變量來判斷該語言是否被成功支持。
CMD#20: enable_testing
打開當前及以下目錄中的測試功能。
enable_testing()
為當前及其下級目錄打開測試功能。也可參見add_test命令。注意,ctest需要在構建跟目錄下找到一個測試文件。因此,這個命令應該在源文件目錄的根目錄下。
CMD#21: endforeach
結束foreach語句塊中的一系列命令。
endforeach(expression)
參見FOREACH命令。
CMD#22: endfunction
結束一個function語句塊中的一系列命令。
endfunction(expression)
參見function命令。
CMD#23: endif
結束一個if語句塊中的一系列命令。
endif(expression)
參見if命令。
CMD#24: endmacro
結束一個macro語句塊中的一系列命令。
endmacro(expression)
參見macro命令。
CMD#25: endwhile
結束一個while語句塊中的一系列命令。
endwhile(expression)
參見while命令。
CMD#26: execute_process
執行一個或更多個子進程。
execute_process(COMMAND <cmd1> [args1...]]
[COMMAND <cmd2> [args2...] [...]]
[WORKING_DIRECTORY <directory>]
[TIMEOUT <seconds>]
[RESULT_VARIABLE <variable>]
[OUTPUT_VARIABLE <variable>]
[ERROR_VARIABLE <variable>]
[INPUT_FILE <file>]
[OUTPUT_FILE <file>]
[ERROR_FILE <file>]
[OUTPUT_QUIET]
[ERROR_QUIET]
[OUTPUT_STRIP_TRAILING_WHITESPACE]
[ERROR_STRIP_TRAILING_WHITESPACE])
運行一條或多條命令,使得前一條命令的標准輸出以管道的方式成為下一條命令的標准輸入。所有進程公用一個單獨的標准錯誤管道。如果指定了WORKING_DIRECTORY選項,后面的路徑選項將會設置為子進程的當前工作路徑。如果指定了TIMEOUT選項,如果子進程沒有在指定的秒數(允許分數)里完成,子進程會自動終止。如果指定了RESULT_VARIABLE選項,該變量將保存為正在運行的進程的結果;它可以是最后一個子進程的整數返回代碼,也可以是一個描述錯誤狀態的字符串。如果指定了OUTPUT_VARIABLE或者ERROR_VARIABLE,后面的變量將會被分別設置為標准輸出和標准錯誤管道的值。如果兩個管道都是用了相同的變量,它們的輸出將會按產生的順序被合並。如果指定了INPUT_FILE,OUTPUT_FILE 或 ERROR_FILE選項,其后的文件將會分別被附加到第一個進程的標准輸入、最后一個進程的標准輸出,或者所有進程的標准錯誤管道上。如果指定了OUTPUT_QUIET后者ERROR_QUIET選項,那么標准輸出或標准錯誤的結果將會被靜靜的忽略掉。如果為同一個管道指定了多於一個的OUTPUT_*或ERROR_* 選項,優先級是沒有指定的。如果沒有指定OUTPUT_*或者ERROR_*選項,輸出將會與CMake進程自身對應的管道共享。
execute_process命令是exec_program命令的一個較新的功能更加強大的版本。但是為了兼容性的原因,舊的exec_program命令還會繼續保留。
CMD#27:export
從構建樹中導出目標供外部使用。
export(TARGETS [target1 [target2 [...]]] [NAMESPACE <namespace>]
[APPEND] FILE <filename>)
創建一個名為<filename>的文件,它可以被外部工程包含進去,從而外部工程可以從當前工程的構建樹中導入目標。這對於交叉編譯那些可以運行在宿主平台的的utility可執行文件,然后將它們導入到另外一個編譯成目標平台代碼的工程中的情形,特別有用。如果指定了NAMESPACE選項,<namespace>字符串將會被擴展到輸出文件中的所有目標的名字中。如果指定了APPEND選項,生成的代碼將會續接在文件之后,而不是覆蓋它。如果一個庫目標被包含在export中,但是連接成它的目標沒有被包含,行為沒有指定。
由該命令創建的文件是與指定的構建樹一致的,並且絕對不應該被安裝。要從一個安裝樹上導出目標,參見install(EXPORT)命令。
export(PACKAGE <name>)
在CMake的用戶包注冊表中,為<name>包(package)存儲當前的構建目錄。這將有助於依賴於它的工程從當前工程的構建樹中查找並使用包而不需要用戶的介入。注意,該命令在包注冊表中創建的條目,僅僅在與跟構建樹一起運行的包配置文件(<name>Config.cmake)一起使用時才會起作用。