CMake入門實戰

2021-08-22 16:24:53 字數 2474 閱讀 6133

編寫cmake配置檔案cmakelists.txt

執行命令cmake path或者ccmake path生成makefile。其中,pathcmakelists.txt所在的目錄。

使用make命令進行編譯。

首先編寫 cmakelists.txt 檔案,並儲存在與main.cc原始檔同個目錄下:

# cmake 最低版本號要求

cmake_minimum_required (version 2.8)

# 專案資訊

project (demo1)

# 指定生成目標

add_executable(demo main.cc)

對於上面的 cmakelists.txt 檔案,依次出現了幾個命令:

cmake_minimum_required:指定執行此配置檔案所需的cmake的最低版本;

project:引數值是demo1,該命令表示專案的名稱是demo1

add_executable: 將名為main.cc的原始檔編譯成乙個名稱為demo的可執行檔案。

./demo2

|+--- main.cc

|+--- mathfunctions.cc

|+--- mathfunctions.h

cmakelists.txt
# cmake最低版本號要求

cmake_minimum_required (version 2.8)

# 專案資訊

project(demo01)

# 指定生成目標

add_executable(domo main.cc mathfunctions.cc)

唯一的改動只是在add_executable命令中增加了乙個mathfunctions.cc原始檔。這樣寫當然沒什麼問題,但是如果原始檔很多,把所有原始檔的名字都加進去將是一件煩人的工作。更省事的方法是使用aux_source_directory命令,該命令會查詢指定目錄下的所有原始檔,然後將結果存進指定變數名。其語法如下:

aux_source_directory ()

因此,可以修改cmakelists.txt如下:

# cmake 最低版本號要求

cmake_minimum_required (version 2.8)

# 專案資訊

project(demo2)

# 查詢當前目錄下的所有原始檔

# 並將名稱儲存到 dir_srcs 變數

aux_source_directory (. dir_srcs)

# 指定生成目標

add_executable (demo $)

./demo3

|+--- main.cc

|+--- math/

|+--- mathfunctions.cc

|+--- mathfunctions.h

根目錄中的cmakelists.txt
# cmake最低版本號要求

cmake_minimum_required (version 2.8)

# 專案資訊

project (demo02)

# 查詢當前目錄下的所有原始檔

# 並將名稱儲存到 dir_srcs 變數

aux_source_directory (. dir_src)

# 新增 math 子目錄

add_subdirectory (math)

# 生成執行檔案

add_executable (demo $)

# 新增鏈結庫

target_link_libraries (demo mathfunctions)

# 查詢當前目錄中的所有原始檔

# 並將名稱儲存到 dir_lib_srcs 變數

aux_source_directory (. dir_lib_srcs)

# 生成鏈結庫

add_library (mathfuntions $)

cmake入門實戰基礎

專案例項目錄結構 主要實現了包含了專案內部生成的庫,同時又依賴了外部三方的庫。bin demo cmake build cmakelists.txt inc mathcommon.h lib libmathcommon.so libmathfunctions.a lib extern build c...

CMake簡易入門

首發於fxm5547的部落格 cmake minimum required version 2.6 project itest c 標準 set cmake cxx standard 11 指定參與編譯的原始檔 add executable itest src main.cpp src cal ca...

cmake 學習入門

1.cmake 的學習入口 cmake 手冊文件一把一把的,就是不帶tutorial,ubuntu16 下的apt檔案就是這樣,無語了 我不需要讀那麼多,我只需要乙個tutorial就可以了,而tutorial只能從網上不能從man手冊或 apt檔案中得到了.不過github上有很多例子,也有tut...