cmake_minimum_required(version) :指定cmake工具的最低版本
include_directories(dir):-I指定的頭文件路徑
link_directories(dir):-L包含的庫文件路徑
PROJECT(name):項目命名
add_subdirectory(math):指明本項目包含一個子目錄 math,這樣 math 目錄下的 CMakeLists.txt 文件和源代碼也會被處理 ;
LIBRARY_OUTPUT_PATH:庫生成的輸出目錄
EXECUTABLE_OUTPUT_PATH:可執行文件生成的輸出目錄
aux_source_directory(dir var):將dir目錄下所有文件自動存儲到var變量中
add_library(name SHARE source_set):用source_set變量包含的所有文件集合生成libname.so共享庫
add_library(name STATIC source_set):用source_set變量包含的所有文件集合生成libname.a靜態庫
add_executable(name source_set):用source_set變量包含的所有文件集合生成可執行文件name
target_link_libraries(name lib_set):指定通過add_executable或者add_library生成name目標時去鏈接的庫集合
install(TARGETS name_set DESTINATION dir):將name_set目標集合全部安裝到dir目錄
SET(var value_set):設置var的值爲value_set包含的值得集合
if(DEFINE XXXX) {}elseif(){}else{}endif():判斷XXX是否被定義的條件選擇邏輯
if(A_XXX STREQUAL B_XXX):判斷A_XXX與B_XXX字符串是否相等
CMAKE_INSTALL_PREFIX #make install 的安裝路徑
CMAKE_BUILD_TYPE #生成的目標爲debug或者release
CMAKE_C_FLAGS_DEBUG:debug模式下增加的c編譯參數
CMAKE_C_FLAGS_RELEASE:release模式下增加的c編譯參數
CMAKE_CXX_FLAGS_DEBUG:debug模式下增加的c++編譯參數
CMAKE_CXX_FLAGS_RELEASE:release模式下增加的c++編譯參數
CMAKE_C_FLAGS #gcc 的編譯參數指定,這個非常好用,一般通過set 修改其值
CMAKE_CXX_FLAGS #g++ 和上面CMAKE_C_FLAGS 類似
CMAKE_CURRENT_SOURCE_DIR # 當前CMakeLists.txt所在的目錄,主要用來定位某文件
CMAKE_CURRENT_BINARY_DIR # 當前CMakeLists.txt對應的編譯時的目錄
CMAKE_C_COMPILER #C編譯器
CMAKE_CXX_COMPILER #C++編譯器
---------------------檢查編譯器是否支持xxx特性(如c++版本類型)----------------------------------
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPLILER_SUPPORT_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPLILER_SUPPORT_CXX0X)
if(COMPILER_SUPPORT_CXX11)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -ldl")
elseif(COMPILER_SUPPORT_CXX0X)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -ldl")
endif()
-------------------------------------------------------------------------------------------------------------------
message(STATUS "str"):輸出str字串
注意事項:
1.CMAKE的命令是不區分大小的,變量時區分大小寫的
2.CMake命令執行時,用-D定義的變量可以在CMakeList.txt中檢測到,常常用來在編譯時指定一
些必要條件;
3.CMake執行時,可以用-D指定CMakeList中(即CMake)的內部變量值,在CMakeList.txt中也
能被檢測到;