CmakeLists學習備忘錄

2021-10-06 08:40:03 字數 3926 閱讀 1473

cmakelists不區分大小寫#代表注釋,一句話一行

cmake_minimum_required(version ×××)

project($)

ps::不是強制性的,最好加上,這會引入兩個變數

$_binary_dir, $_source_dir
外部編譯要時刻區分這兩個變數對應的目錄

例如:#設定cpp檔案列表

set(src_dirs *.cpp)

set (lib_dirs *.cpp)

cmakelists.txt:

cmake_minimum_required(version 2.8.0)

project(csr)

add_executable(csr computesquareroot.cpp)

computesquareroot.cpp:

#include 

#include

#include

using namespace std;

int main(int argc,char **ar**)

cout<

return 0;

}

0.1版本只是簡單的例子,只有乙個功能,如果我們有很多功能要重複使用,乙個原始檔似乎就不夠用了,我們需要把不同的函式編譯成庫,方便互相之間呼叫。

標頭檔案:hello.h

#ifndef $_hello_h

//如果沒有定義×××

#define $_hello_h

//就定義×××

void

hello

(const

char

* s)

;#endif

準備編譯成庫的檔案hello.cpp

#include

#include

#include

"hello.h"

void

hello

(const

char

* s)

cmakelists.txt

cmake_minimum_required

(version 2.8

)project

(main)

set(lib_list hello.cpp)

set(src_dirs main.cpp)

add_library

(libhello $

)set_target_properties

(libhello properties output_name "hello"

)add_executable

(hello $

)target_link_libraries

(hello libhello)

因為我在生成庫的時候取名為libhello,但是我們想用hello.h,又因為可執行程式為hello,導致衝突,所以加了一句

set_target_properties

(libhello properties output_name "hello"

)

相當於取了別名吧。

main.cpp

#include

"hello.h"

intmain

(int argc,

char

**ar**)

如果原始檔特別多,標頭檔案也特別多,都放在乙個目錄下似乎就太亂了,我們可以把庫檔案和可執行檔案分開放。

src:存放可執行檔案原始檔 lib:存放庫檔案原始檔及標頭檔案

目錄層級

包含三個cmakelists.txt

頂層:

cmake_minimum_required

(version 2.8

)project

(0.3

)#對子資料夾中cmakelists.txt編譯

add_subdirectory

(src)

add_subdirectory

(lib)

src/cmakelist.txt:

include_directories

($/lib)

set(src_list hello.cpp)

add_executable

(hello $

)target_link_libraries

(hello libhello)

lib/cmakelists.txt:

set

(lib_list libhello.cpp)

add_library

(libhello $

)set_target_properties

(libhello properties output_name hello)

0.4版本一般來說,可執行檔案都放在bin目錄下,庫檔案都放在lib目錄下,所以我們可以設定可執行檔案與庫檔案輸出路徑。

因為我修改了一些目錄的名字,所以cmakelists.txt要對應:

頂層:

cmake_minimum_required

(version 2.8

)project

(0.3

)#對子資料夾中cmakelists.txt編譯

add_subdirectory

(src)

add_subdirectory

(libhello)

src/cmakelist.txt:

include_directories

($/libhello)

set(src_list hello.cpp)

add_executable

(hello $

)set

(executable_output_path $

/bin)

target_link_libraries

(hello libhello)

lib/cmakelists.txt:

set

(lib_list libhello.cpp)

add_library

(libhello $

)set

(library_output_path $

/lib)

set_target_properties

(libhello properties output_name hello)

ps:share

jquery學習備忘錄

語法解釋 1.select id change function 為select新增事件,當選擇其中一項時觸發 2.var checktext select id find option selected text 獲取select選擇的text 3.var checkvalue select id...

ATL 學習備忘錄

1.編繹錯誤 error lnk2005 x already defined in atlmincrt.lib atlinit.obj 解決辦法 開啟release版本的專案配置項,把configuration properties general minimize crt use in atl設定...

Lua 學習備忘錄3

一些大型遊戲需要對資料的整理,這樣便於修改和統一管理還有修改。常見的有js和csv csv 其實就是都好分割的簡單文字結構,所以當作一般的文本來處理就好了,js需要解析,有現成的解析庫 function getline filename index 0 myline for line in io.l...