CMake常用命令
這里介紹一下常用的命令(CMake 2.8 的命令可以在此查詢):
http://www.cmake.org/cmake/help/v2.8.8/cmake.html#section_Commands
1)project 命令
命令語法:project(<projectname> [languageName1 languageName2 … ] )
命令簡述:用於指定項目的名稱
使用范例:project(Main)
2)cmake_minimum_required命令
命令語法:cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]][FATAL_ERROR])
命令簡述:用於指定需要的 CMake 的最低版本
使用范例:cmake_minimum_required(VERSION 2.8)
3)aux_source_directory命令
命令語法:aux_source_directory(<dir> <variable>)
命令簡述:用於將 dir 目錄下的所有源文件的名字保存在變量 variable 中
使用范例:aux_source_directory(. DIR_SRCS)
4)add_executable 命令
命令語法:add_executable(<name> [WIN32] [MACOSX_BUNDLE][EXCLUDE_FROM_ALL] source1 source2 … sourceN)
命令簡述:用於指定從一組源文件 source1 source2 … sourceN 編譯出一個可執行文件且命名為 name
使用范例:add_executable(Main ${DIR_SRCS})
5)add_library 命令
命令語法:add_library([STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1source2 … sourceN)
命令簡述:用於指定從一組源文件 source1 source2 … sourceN 編譯出一個庫文件且命名為 name
使用范例:add_library(Lib ${DIR_SRCS})
6)add_dependencies 命令
命令語法:add_dependencies(target-name depend-target1 depend-target2 …)
命令簡述:用於指定某個目標(可執行文件或者庫文件)依賴於其他的目標。這里的目標必須是 add_executable、add_library、add_custom_target 命令創建的目標
7)add_subdirectory 命令
命令語法:add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
命令簡述:用於添加一個需要進行構建的子目錄
使用范例:add_subdirectory(Lib)
8)target_link_libraries命令
命令語法:target_link_libraries(<target> [item1 [item2 […]]][[debug|optimized|general] ] …)
命令簡述:用於指定 target 需要鏈接 item1 item2 …。這里 target 必須已經被創建,鏈接的 item 可以是已經存在的 target(依賴關系會自動添加)
使用范例:target_link_libraries(Main Lib)
9)set 命令
命令語法:set(<variable> <value> [[CACHE <type><docstring> [FORCE]] | PARENT_SCOPE])
命令簡述:用於設定變量 variable 的值為 value。如果指定了 CACHE 變量將被放入 Cache(緩存)中。
使用范例:set(ProjectName Main)
10)unset 命令
命令語法:unset(<variable> [CACHE])
命令簡述:用於移除變量 variable。如果指定了 CACHE 變量將被從 Cache 中移除。
使用范例:unset(VAR CACHE)
11)message 命令
命令語法:message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] “message todisplay”…)
命令簡述:用於輸出信息
使用范例:message(“Hello World”)
12)include_directories 命令
命令語法:include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 …)
命令簡述:用於設定目錄,這些設定的目錄將被編譯器用來查找 include 文件
使用范例:include_directories(${PROJECT_SOURCE_DIR}/lib)
13)find_path 命令
命令語法:find_path(<VAR> name1 [path1 path2 …])
命令簡述:用於查找包含文件 name1 的路徑,如果找到則將路徑保存在 VAR 中(此路徑為一個絕對路徑),如果沒有找到則結果為 <VAR>-NOTFOUND。默認的情況下,VAR 會被保存在 Cache 中,這時候我們需要清除 VAR 才可以進行下一次查詢(使用 unset 命令)。
使用范例:
find_path(LUA_INCLUDE_PATH lua.h${LUA_INCLUDE_FIND_PATH})
if(NOT LUA_INCLUDE_PATH)
message(SEND_ERROR "Header file lua.h not found")
endif()
14)find_library 命令
命令語法:find_library(<VAR> name1 [path1 path2 …])
命令簡述:用於查找庫文件 name1 的路徑,如果找到則將路徑保存在 VAR 中(此路徑為一個絕對路徑),如果沒有找到則結果為 <VAR>-NOTFOUND。一個類似的命令 link_directories 已經不太建議使用了
15)add_definitions 命令
命令語法:add_definitions(-DFOO -DBAR …)
命令簡述:用於添加編譯器命令行標志(選項),通常的情況下我們使用其來添加預處理器定義
使用范例:add_definitions(-D_UNICODE -DUNICODE)
16)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)
18)file 命令
命令簡述:此命令提供了豐富的文件和目錄的相關操作(這里僅說一下比較常用的)
使用范例:
# 目錄的遍歷
# GLOB 用於產生一個文件(目錄)路徑列表並保存在variable 中
# 文件路徑列表中的每個文件的文件名都能匹配globbing expressions(非正則表達式,但是類似)
# 如果指定了 RELATIVE 路徑,那么返回的文件路徑列表中的路徑為相對於 RELATIVE 的路徑
# file(GLOB variable [RELATIVE path][globbing expressions]...)
# 獲取當前目錄下的所有的文件(目錄)的路徑並保存到 ALL_FILE_PATH 變量中
file(GLOB ALL_FILE_PATH ./*)
# 獲取當前目錄下的 .h 文件的文件名並保存到ALL_H_FILE 變量中
# 這里的變量CMAKE_CURRENT_LIST_DIR 表示正在處理的 CMakeLists.txt 文件的所在的目錄的絕對路徑(2.8.3 以及以后版本才支持)
file(GLOB ALL_H_FILE RELATIVE${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/*.h)
