CMakeListx.txt 编辑语法学习
生活随笔
收集整理的這篇文章主要介紹了
CMakeListx.txt 编辑语法学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
已hello.cpp為源文件,構建一個CMakeLists.txtcmake_minimum_required(VERSION 2.8)
project(hello)
add_executable(hello hello.cpp)在目錄中的build 文件夾中進行cmake ..和make ,就可以編譯源文件生成可運行文件.cmake的常用命令:project 命令語句 : project(<projectname> [languageName1 languageName2 … ] )作用 : 指定項目名cmake_minimum_required 命令語句 : cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]] [FATAL_ERROR])作用 : 指定cmake需要的最小版本aux_source_directory 命令語句 : aux_source_directory(<dir> <variable>)作用 : 獲取指定目錄下的所有文件,保存到variable中,包括 .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx文件示例 : aux_source_directory(. var)#獲取當前目錄中源文件add_executable 命令語句 : add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)作用 : 將指定文件source編譯成可執行文件,命名位name示例 : add_executable(hello hello.cpp)add_library 命令語句 : add_library([STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)作用 : 添加一個名為<name>的庫文件,指定STATIC,SHARED,或者MODULE參數用來指定要創建的庫的類型。STATIC庫是目標文件的歸檔文件,在鏈接其它目標的時候使用。SHARED庫會被動態鏈接,在運行時被加載。MODULE庫是不會被鏈接到其它目標中的插件,但是可能會在運行時使用dlopen-系列的函數動態鏈接。如果沒有類型被顯式指定,這個選項將會根據變量BUILD_SHARED_LIBS的當前值是否為真決定是STATIC還是SHARED示例 : add_library(Lib ${DIR_SRCS})add_dependencies 命令語句 : add_dependencies(target-name depend-target1 depend-target2 …)作用 : 用于指定某個目標(可執行文件或者庫文件)依賴于其他的目標。這里的目標必須是 add_executable、add_library、add_custom_target 命令創建的目標add_subdirectory 命令語句 : add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])作用 : 用于添加一個需要進行構建的子目錄示例 : add_subdirectory(directory)target_link_libraries 命令語句 : target_link_libraries(<target> [item1 [item2 […]]] [[debug|optimized|general] ] …)作用 : 用于指定 target 需要鏈接 item1 item2 …。這里 target 必須已經被創建,鏈接的 item 可以是已經存在的 target(依賴關系會自動添加)示例 : target_link_libraries(Main Lib)set 命令語句 : set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])作用 : 用于設定變量 variable 的值為 value。variable可以自己定義示例 : set(var "${list}_exe")unset 命令語句 : unset(<variable> [CACHE])作用 : 用于移除變量 variable。如果指定了 CACHE 變量將被從 Cache 中移除。示例 : unset(VAR CACHE)message 命令語句 : message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] “message to display” …)作用 : 輸出信息示例 : message("hello world")include_directories 命令語句 : include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 …)作用 : 用于設定目錄,這些設定的目錄將被編譯器用來查找 include 文件示例 : include_directories(${PROJECT_SOURCE_DIR}/lib)find_path 命令語句 : find_path(<VAR> name1 [path1 path2 …])作用 : 用于查找包含文件 name1 的路徑,如果找到則將路徑保存在 VAR 中(此路徑為一個絕對路徑),如果沒有找到則結果為 <VAR>-NOTFOUND。默認的情況下,VAR 會被保存在 Cache 中,這時候我們需要清除 VAR 才可以進行下一次查詢(使用 unset 命令)add_definitions 命令語句 : find_library(<VAR> name1 [path1 path2 …])作用 : 用于添加編譯器命令行標志(選項),通常的情況下我們使用其來添加預處理器定義示例 : add_definitions(-D_UNICODE -DUNICODE)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 用于指定外部命令的工作目錄,RESULT_VARIABLE 用于指定一個變量保存外部命令執行的結果,這個結果可能是最后一個執行的外部命令的退出碼或者是一個描述錯誤條件的字符串,OUTPUT_VARIABLE 或者 ERROR_VARIABLE 用于指定一個變量保存標準輸出或者標準錯誤,OUTPUT_QUIET 或者 ERROR_QUIET 用于忽略標準輸出和標準錯誤。示例 : execute_process(COMMAND ls)file 命令語句 : file(WRITE filename "message to write"... ) 作用 : WRITE選項將會寫一條消息到名為filename的文件中。如果文件已經存在,該命令會覆蓋已有的文件;如果文件不存在,它將創建該文件。===========================================================語句 : file(APPEND filename "message to write"... )作用 : APPEND選項和WRITE選項一樣,將會寫一條消息到名為filename的文件中,只是該消息會附加到文件末尾。 ===========================================================語句 : file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX]) 作用 : READ選項將會讀一個文件中的內容并將其存儲在變量里。讀文件的位置從offset開始,最多讀numBytes個字節。如果指定了HEX參數,二進制代碼將會轉換為十六進制表達方式,并存儲在變量里。 ===========================================================語句 : file(STRINGS filename variable [LIMIT_COUNT num] [LIMIT_INPUT numBytes] [LIMIT_OUTPUT numBytes] [LENGTH_MINIMUM numBytes] [LENGTH_MAXIMUM numBytes][NEWLINE_CONSUME] [REGEX regex] [NO_HEX_CONVERSION]) 作用 : STRINGS將會從一個文件中將一個ASCII字符串的list解析出來,然后存儲在variable變量中。文件中的二進制數據會被忽略。回車換行符會被忽略。它也可以用在Intel的Hex和Motorola的S-記錄文件;讀取它們時,它們會被自動轉換為二進制格式。可以使用NO_HEX_CONVERSION選項禁止這項功能。LIMIT_COUNT選項設定了返回的字符串的最大數量。LIMIT_INPUT設置了從輸入文件中讀取的最大字節數。LIMIT_OUTPUT設置了在輸出變量中存儲的最大字節數。LENGTH_MINIMUM設置了要返回的字符串的最小長度;小于該長度的字符串會被忽略。LENGTH_MAXIMUM設置了返回字符串的最大長度;更長的字符串會被分割成不長于最大長度的字符串。NEWLINE_CONSUME選項允許新行被包含到字符串中,而不是終止它們。REGEX選項指定了一個待返回的字符串必須滿足的正則表達式。 ===========================================================語句 : file(GLOB variable [RELATIVE path] [globbing expressions]...) 作用 : GLOB選項將會為所有匹配查詢表達式的文件生成一個文件list,并將該list存儲進變量variable里。文件名查詢表達式與正則表達式類似,只不過更加簡單。如果為一個表達式指定了RELATIVE標志,返回的結果將會是相對于給定路徑的相對路徑。 ===========================================================語句 : file(GLOB_RECURSE variable [RELATIVE path] [FOLLOW_SYMLINKS] [globbing expressions]...) 作用 : GLOB_RECURSE選項將會生成一個類似于通常的GLOB選項的list,只是它會尋訪所有那些匹配目錄的子路徑并同時匹配查詢表達式的文件。作為符號鏈接的子路徑只有在給定FOLLOW_SYMLINKS選項或者cmake策略CMP0009被設置為NEW時,才會被尋訪到。參見cmake --help-policy CMP0009 查詢跟多有用的信息。 ===========================================================語句 : file(RENAME <oldname> <newname>) 作用 : RENAME選項對同一個文件系統下的一個文件或目錄重命名。===========================================================語句 : file(REMOVE [file1 ...]) 作用 : REMOVE選項將會刪除指定的文件,包括在子路徑下的文件。===========================================================語句 : file(REMOVE_RECURSE [file1 ...]) 作用 : REMOVE_RECURSE選項會刪除給定的文件以及目錄,包括非空目錄。 ===========================================================語句 : file(MAKE_DIRECTORY [directory1 directory2 ...]) 作用 : MAKE_DIRECTORY選項將會創建指定的目錄,如果它們的父目錄不存在時,同樣也會創建。(類似于mkdir命令——譯注) ===========================================================語句 : file(RELATIVE_PATH variable directory file) 作用 : RELATIVE_PATH選項會確定從direcroty參數到指定文件的相對路徑。 ===========================================================語句 : file(TO_CMAKE_PATH path result) 作用 : TO_CMAKE_PATH選項會把path轉換為一個以unix的 / 開頭的cmake風格的路徑。輸入可以是一個單一的路徑,也可以是一個系統路徑,比如"$ENV{PATH}"。注意,在調用TO_CMAKE_PATH的ENV周圍的雙引號只能有一個參數(Note the double quotes around the ENV call TO_CMAKE_PATH only takes one argument. 原文如此。 ===========================================================語句 : file(TO_NATIVE_PATH path result) 作用 : TO_NATIVE_PATH選項與TO_CMAKE_PATH選項很相似,但是它會把cmake風格的路徑轉換為本地路徑風格:windows下用\,而unix下用/。 ===========================================================語句 : file(DOWNLOAD url file [TIMEOUT timeout] [STATUS status] [LOG log] [EXPECTED_MD5 sum] [SHOW_PROGRESS]) 作用 : DOWNLOAD 將給定的URL下載到指定的文件中。如果指定了LOG var選項,下載日志將會被輸出到var中。如果指定了STATUS var選項,下載操作的狀態會被輸出到var中。該狀態返回值是一個長度為2的list。list的第一個元素是操作的數字返回值,第二個返回值是錯誤的字符串值。錯誤信息如果是數字0,操作中沒有發生錯誤。如果指定了TIMEOUT time選項,在time秒之后,操作會超時退出;time應該是整數。如果指定了EXPECTED_MD5 sum選項,下載操作會認證下載的文件的實際MD5和是否與期望值匹配。如果不匹配,操作將返回一個錯誤。如果指定了SHOW_PROGRESS選項,進度信息會以狀態信息的形式被打印出來,直到操作完成。cmake 常用語句條件控制====================== if(expression)# ...elseif(expression2)# ...else()# ...endif()======================對于 if(string) 來說:如果 string 為(不區分大小寫)1、ON、YES、TRUE、Y、非 0 的數則表示真如果 string 為(不區分大小寫)0、OFF、NO、FALSE、N、IGNORE、空字符串、以 -NOTFOUND 結尾的字符串則表示假如果 string 不符合上面兩種情況,則 string 被認為是一個變量的名字。變量的值為第二條所述的各值則表示假,否則表示真===========================================================if中的語句:if(NOT expression)為真的前提是 expression 為假if(expr1 AND expr2)為真的前提是 expr1 和 expr2 都為真if(expr1 OR expr2)為真的前提是 expr1 或者 expr2 為真if(COMMAND command-name)為真的前提是存在 command-name 命令、宏或函數且能夠被調用if(EXISTS name)為真的前提是存在 name 的文件或者目錄(應該使用絕對路徑)if(file1 IS_NEWER_THAN file2)為真的前提是 file1 比 file2 新或者 file1、file2 中有一個文件不存在(應該使用絕對路徑)if(IS_DIRECTORY directory-name)為真的前提是 directory-name 表示的是一個目錄(應該使用絕對路徑)if(variable|string MATCHES regex)為真的前提是變量值或者字符串匹配 regex 正則表達式if(variable|string LESS variable|string)if(variable|string GREATER variable|string)if(variable|string EQUAL variable|string)為真的前提是變量值或者字符串為有效的數字且滿足小于(大于、等于)的條件if(variable|string STRLESS variable|string)if(variable|string STRGREATER variable|string)if(variable|string STREQUAL variable|string)為真的前提是變量值或者字符串以字典序滿足小于(大于、等于)的條件if(DEFINED variable)為真的前提是 variable 表示的變量被定義了循環結構foreach循環======================set(VAR a b c)foreach(f ${VAR})message(${f})endforeach()====================== while循環======================set(VAR 5)while(${VAR} GREATER 0)message(${VAR})math(EXPR VAR "${VAR} - 1")endwhile()======================宏定義macro循環======================# 定義一個宏 hellomacro(hello MESSAGE)message(${MESSAGE})endmacro()# 調用宏 hellohello("hello world")# 定義一個函數 hellofunction(hello MESSAGE)message(${MESSAGE})endfunction()======================函數定義======================function(get_func RESULT)# RESULT 的值為實參的值,因此需要使用 ${RESULT}# 這里使用 PARENT_SCOPE 是因為函數會構建一個局部作用域set(${RESULT} "Hello Function" PARENT_SCOPE)endfunction()macro(get_macro RESULT)set(${RESULT} "Hello Macro")endmacro()get_func(V1)# 輸出 Hello Functionmessage(${V1})get_macro(V2)# 輸出 Hello Macromessage(${V2})======================字符串控制string(REGEX MATCH (regular_expression) (output variable) (input) [(input)...])string(REGEX MATCHALL (regular_expression) (output variable) (input) [(input)...])string(REGEX REPLACE (regular_expression) (replace_expression) (output variable) (input) [(input)...])string(REPLACE (match_string) (replace_string) (output variable) (input) [(input)...])string(COMPARE EQUAL (string1) (string2) (output variable))string(COMPARE NOTEQUAL (string1) (string2) (output variable))string(COMPARE LESS (string1) (string2) (output variable))string(COMPARE GREATER (string1) (string2) (output variable))string(ASCII (number) [(number) ...] (output variable))string(CONFIGURE (string1) (output variable) [@ONLY] [ESCAPE_QUOTES])string(TOUPPER (string1) (output variable))string(TOLOWER (string1) (output variable))string(LENGTH (string) (output variable))string(SUBSTRING (string) (begin) (length) (output variable))string(STRIP (string) (output variable))string(RANDOM [LENGTH (length)] [ALPHABET (alphabet)] (output variable))cmake 常用變量UNIX 如果為真,表示為 UNIX-like 的系統,包括 Apple OS X 和 CygWinWIN32 如果為真,表示為 Windows 系統,包括 CygWinAPPLE 如果為真,表示為 Apple 系統CMAKE_SIZEOF_VOID_P 表示 void* 的大小(例如為 4 或者 8),可以使用其來判斷當前構建為 32 位還是 64 位CMAKE_CURRENT_LIST_DIR 表示正在處理的 CMakeLists.txt 文件的所在的目錄的絕對路徑(2.8.3 以及以后版本才支持)CMAKE_ARCHIVE_OUTPUT_DIRECTORY 用于設置 ARCHIVE 目標的輸出路徑CMAKE_LIBRARY_OUTPUT_DIRECTORY 用于設置 LIBRARY 目標的輸出路徑CMAKE_RUNTIME_OUTPUT_DIRECTORY 用于設置 RUNTIME 目標的輸出路徑可能會用到的一些命令get_property 獲取一個屬性值get_property(<variable><GLOBAL |DIRECTORY [dir] |TARGET <target> |SOURCE <source> |TEST <test> |CACHE <entry> |VARIABLE>PROPERTY <name>[SET | DEFINED | BRIEF_DOCS | FULL_DOCS])get_source_file_property 為一個源文件獲取一種屬性值get_source_file_property(VAR file property)get_target_property 從一個目標中獲取一個屬性值get_target_property(VAR target property)get_test_property 獲取一個測試的屬性get_test_property(test VAR property)get_cmake_property 獲取一個CMake實例的屬性get_cmake_property(VAR property)get_filename_component 得到一個完整文件名中的特定部分get_filename_component(<VAR> FileNamePATH|ABSOLUTE|NAME|EXT|NAME_WE|REALPATH[CACHE])get_cmake_property 獲取一個CMake實例的屬性。get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)參考 : http://www.cnblogs.com/coderfenghc/archive/2012/07/08/2581734.html
http://name5566.com/1795.html
?
轉載于:https://www.cnblogs.com/Free-Thinker/p/6168733.html
總結
以上是生活随笔為你收集整理的CMakeListx.txt 编辑语法学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运动框架实现思路(js)
- 下一篇: .NET 基础 一步步 一幕幕 [注释、