cmake 提供了比 autoconfig 更簡潔的語法
在 linux 平台下使用 cmake 生成 makefile 並編譯的流程如下:
編寫
cmakelists.txt
。
執行命令
「
cmake path
」
或者
「
ccmake path
」
生成
makefile ( path
是
cmakelists.txt
所在的目錄
)
。
使用
make
命令進行編譯。
cmakelists.txt 需要手工編寫,也可以通過編寫指令碼進行半自動的生成
現假設我們的專案中只有乙個原始檔
main.cpp
清單 1 原始檔 main.cpp
1 #include2
3 int main()
4 )
cmakelists.txt 的語法比較簡單,由命令、注釋和空格組成,其中命令是不區分大小寫的,符號"#"後面的內容被認為是注釋。命令由命令名稱、小括號和引數組成,引數之間使用空格進行間隔。例如對於清單2的 cmakelists.txt 檔案:第一行是一條命令,名稱是 project ,引數是 main ,該命令表示專案的名稱是 main 。第二行的命令限定了 cmake 的版本。第三行使用命令 aux_source_directory 將當前目錄中的原始檔名稱賦值給變數 dir_srcs 。 cmake 手冊中對命令 aux_source_directory 的描述如下:
aux_source_directory()
該命令會把引數 中所有的原始檔名稱賦值給引數 。 第四行使用命令 add_executable 指示變數 dir_srcs 中的原始檔需要編譯 成乙個名稱為 main 的可執行檔案。
完成了檔案 cmakelists.txt 的編寫後需要使用 cmake 或 ccmake 命令生成makefile 。 ccmake 與命令 cmake 的不同之處在於 ccmake 提供了乙個圖形化的操作介面。cmake 命令的執行方式如下:
cmake [options]
這裡我們進入了 main.cpp 所在的目錄後執行 「cmake .」 後就可以得到 makefile 並使用 make 進行編譯,如下圖所示。
cmake
處理源**分
布在不同目錄中的情況也十分簡單。現假設我們的源**分布情況如下
:
圖 2. 源**分布情況
在目錄 step2 中建立檔案 cmakelists.txt 。檔案內容如下:
清單 3 目錄 step2 中的 cmakelists.txt
1 project(main)相對於清單 2,該檔案新增了下面的內容: 第三行,使用命令 add_subdirectory 指明本專案包含乙個子目錄 src 。第六行,使用命令 target_link_libraries 指明可執行檔案 main 需要連線乙個名為test的鏈結庫 。2 cmake_minimum_required(version 2.6)
3 add_subdirectory( src )
4 aux_source_directory(. dir_srcs)
5 add_executable(main $ )
6 target_link_libraries( main test )
在子目錄 src 中建立 cmakelists.txt。檔案內容如下:
清單 4. 目錄 src 中的 cmakelists.txt
1 aux_source_directory(. dir_test1_srcs)在該檔案中使用命令 add_library 將 src 目錄中的原始檔編譯為共享庫。2 add_library ( test $)
至此我們完成了專案中所有 cmakelists.txt 檔案的編寫,進入目錄 step2 中依次執行命令 「cmake .」 和 「make」 得到結果如下:
圖3. 處理多源檔案目錄時 cmake 的執行結果
使用CSC命令來生成專案
本篇部落格來演示如何通過csc命令來生成程式集和應用程式,而不使用visualstudio。編譯c 使用的是csc命令,該命令位於c windows microsoft.net framework64 v4.0.30319目錄下,如果你的控制台提示找不到csc命令,則需要將該路徑加入到系統的環境變數...
使用Rex來生成字串陣列
我們在專案中,經常要使用正規表示式,現在有乙個工具可以按正規表示式生成資料.正規表示式的語法忘記了嗎?看這兒.如果你熟悉正規表示式 具體用法可以在cmd下執行便可以看到用法,這個是.net的程式.我們可以引用它,然後用下面的code來生成我們想要的字串陣列.1 2 generates the tes...
用jxl來生成Excel
file file new file xx xx xls if file.getparentfile exists workbook wb null 用來獲取工作簿 writableworkbook wwb null 建立工作簿 writablesheet sheet0 null sheet if ...