Cmake入門(三)主要命令總結

2021-09-18 01:49:52 字數 2701 閱讀 9646

在前兩章的總結中,分別總結了一些編譯程式所必須的命令和應用例項,分別是:

cmake_minimum_required宣告最低版本

project宣告工程名字

add_executable新增可執行檔案

add_library打包成庫

target_link_libraries鏈結庫到可執行檔案上

aux_source_directory()  把指定目錄存進指定變數

add_subdirectory新增子目錄

1. include_directories指定標頭檔案的搜尋路徑 (還是和之前一樣的例子,lib.cpp檔案和lib.**件放在lib資料夾下,在資料夾以外的main.cpp必須把頭檔案include進來,include之後應該把路徑跟上,例如#include"lib/lib.h",而通過在cmakelists中加這麼一句include_directories(./lib),那麼main.cpp中即可直接#include"lib.h"而不用指定其路徑。

2. message執行cmake命令時列印訊息,具體形式為:message([send_error | status| fatal_error] "message to display"),前面是可選的訊息型別,後面是想要顯示的訊息內容

3. set設定命令,具體形式為:set(變數名 變數值)。對於這個命令,可以拿它來設定自定義的變數名,也可以設定cmake的內部變數,例如:

set( cmake_build_type "release" )

set( cmake_cxx_flags "-o3" )

# 新增c++ 11標準支援

set( cmake_cxx_flags "-std=c++11" )

順便提一句,編譯型別可以設定release或者debug。二者區別在於:debug模式下生成兩個檔案,除了.exe或.dll檔案外,還有乙個.pdb檔案,該檔案記錄了**中斷點等除錯資訊;release模式下生成乙個檔案.exe或.dll檔案。前者是除錯版本,後者是發布版本。預設是debug版本的。附帶關於內建變數的說明:

cmake_install_prefix  #make install 的安裝路徑

cmake_build_type #生成的目標為debug或者release

cmake_c_flags #gcc 的編譯引數指定,一般通過set 修改其值

cmake_cxx_flags #g++ 和上面cmake_c_flags 類似

cmake_current_source_dir # 當前cmakelists.txt所在的目錄,主要用來定位某檔案

cmake_current_binary_dir # 當前cmakelists.txt對應的編譯時的目錄

當然也可以隨便按照自己的需求set乙個變數,例如

set( my_flag 1 )
這樣之後可以用$來引用這個變數 

4. set_target_properties這個主要用途是解決相同名字的動態或者靜態target被刪除的問題。直接用例子來解釋:

#片段

add_library (hello_static static $)

set_target_properties (hello_static properties output_name "hello")

為了防止library中共享庫和靜態庫重名,因此讓"hello_static" 在輸出時,不是"hello_static",而是以"hello"的名字顯示。、

其中,output_name 是可變的,比如可以換成hello_static對於clean_direct_output這個屬性的定義,或者是針對動態庫定義其版本號和api號(version指代動態庫版本,soversion指代api版本):

set_target_properties (hello properties version 1.2 soversion 1)
5.get_target_property,是把target的屬性弄到變數裡去,例如(把剛剛對hello_static換的名字hello儲存到output_value這個變數裡去:

get_target_property (output_value hello_static output_name)
具體這塊的內容,參見某位博主的詳細解釋:

7.option(var_name "comment" var_value)給變數var_name賦值為var_value,comment是此變數的注釋,和set有類似的功效,用於給某變數設定預設值

8. configure_file作用是讓普通檔案也能使用cmake中的變數。 也就是說**檔案中可以使用cmake中的變數。詳解見這裡。

在之後的內容裡,我還會講解關於install和非常重要的find_package兩大命令。

shell主要命令使用總結

ls 列出目錄內容 列出檔案資訊 預設是當前目錄 以字母順序排序 如果使用沒有任何 cftuvsux 或 sort選項 grep 格式 grep option pattern filename 注意 pattern如果是表示式或者超過兩個單詞的,需要用引號引用.可以是單引號也可雙引號,區別是單引號無...

DEBUG主要命令

1 如何呼叫debug程式 語法格式 debug 驅動器名 路徑 檔名 如有檔名,則將指定的檔案調入記憶體。如命令中沒有指定檔名,則debug可以與正在記憶體中的內容打交道。debug程式調入後,出現提示符 說明現在系統在debug程式的管理下,所有debug命令只有在出現提示符後才有效。2 deb...

linux主要命令

list 執行許可權 所有使用者功能描述 顯示目錄檔案 語法 ls 選項 a 顯示所有檔案,包括隱藏檔案 l 詳細資訊顯示 mkdir 執行許可權 所有使用者 語法 mkdir p 目錄名 功能描述 建立新目錄 p 遞迴建立 pwd 執行許可權 所有使用者 語法 pwd 顯示當前目錄 rmdir 執...