中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

自動化構建系統CMake怎么用

發布時間:2022-03-05 09:25:45 來源:億速云 閱讀:242 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“自動化構建系統CMake怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“自動化構建系統CMake怎么用”這篇文章吧。

CMake 是一個跨平臺的自動化構建系統,它使用一個名為 CMakeLists.txt 的文件來描述構建過程,可以產生標準的構建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。

自動化構建系統CMake怎么用

例1:Hello World

源代碼只有一個文件HelloWorld.cpp

#includeint main(int argc, char *argv[]){
  std::cout "Hello World!" return 0;
}
123456

CMakeLists.txt也只有三行而已(使用cmake管理項目的過程,也就是編寫CMakeLists.txt的過程)

cmake_minimum_required(VERSION 2.8.9)
project (hello)
add_executable(hello helloworld.cpp)
123

第一行用于指定cmake最低版本 第二行指定項目名稱(這個名稱是任意的) 第三行指定編譯一個可執行文件,hello是第一個參數,表示生成可執行文件的文件名(這個文件名也是任意的),第二個參數helloworld.cpp則用于指定源文件。

如果您電腦上已經安裝了cmake,那么我們就已經完事具備了。 第一步,用cmake生成Makefile文件

  • 注:cmake命令后邊跟的就是CMakelist.txt所在的目錄,這個目錄不必是當前目錄,你也可以新建一個build目錄或者其他名字的目錄來生成build文件,實際項目中也都是這么做的,這樣代碼會很干凈也便于git管理. 自動化構建系統CMake怎么用 第二步,make編譯程序 && 編譯成功 通過上一步我們發現,當前目錄下已經多出了幾個文件,特別是Makefile文件 自動化構建系統CMake怎么用 第三步,測試程序 到此,第一個用cmake管理的程序,成功了! 自動化構建系統CMake怎么用

例2: 包含目錄結構的項目

在例1中完全體現不出cmake的任何優勢,用g++一行可以解決的問題我們繞了一大圈。可是cmake本來的優勢就是管理龐大的項目的。 這個例子用最小的程序來體現一個帶目錄結構的項目。其中有源文件目錄,頭文件目錄。 自動化構建系統CMake怎么用

cmake_minimum_required(VERSION 2.8.9)
project(directory_test)#Bring the headers, such as Student.h into the projectinclude_directories(include)#Can manually add the sources using the set command as follows:#set(SOURCES src/mainapp.cpp src/Student.cpp)#However, the file(GLOB...) allows for wildcard additions:file(GLOB SOURCES "src/*.cpp")

add_executable(testStudent ${SOURCES})
12345678910111213

和第一個例子比起來,CMakelist.txt有如下改變:

  1. 使用include_directories() 包含頭文件目錄
  2. 使用set(SOURCES … ) 或GLOB (or GLOB_RECURSE) 設置源文件SOURCES
  3. add_executable 使用變量SOURCES ,而不是具體的文件名 接下來的步驟就和例子1一樣了,不同之處是我們新建了一個build目錄來存儲編譯中間文件,如下圖: 自動化構建系統CMake怎么用
  4. 下一步make,然后運行結果如下:
  5. 自動化構建系統CMake怎么用

例3:動態庫編譯(.so)

有了前兩個例子的基礎,接下來的例子我們只需要看一下目錄結構和CMakelist.txt.

  自動化構建系統CMake怎么用 

CMakelist.txt如下:

project(directory_test)set(CMAKE_BUILD_TYPE Release)#Bring the headers, such as Student.h into the projectinclude_directories(include)#However, the file(GLOB...) allows for wildcard additions:file(GLOB SOURCES "src/*.cpp")#Generate the shared library from the sourcesadd_library(testStudent SHARED ${SOURCES})#Set the location for library installation -- i.e., /usr/lib in this case# not really necessary in this example. Use "sudo make install" to applyinstall(TARGETS testStudent DESTINATION /usr/lib)
123456789101112131415

兩個重要變化:

  1. 我們不再使用add_executable() 而是使用add_library()
  2. install 指定安裝目錄,執行sudo make install時動態庫將被安裝在/usr/lib目錄 如前兩個例子,我們依次執行,cmake make編譯結果如下:
    自動化構建系統CMake怎么用

例4:靜態庫編譯 (.a)

基于例3,我們編譯一個靜態庫

  自動化構建系統CMake怎么用 

將CMakeList.txt修改為如下所示:

cmake_minimum_required(VERSION 2.8.9)
project(directory_test)set(CMAKE_BUILD_TYPE Release)#Bring the headers, such as Student.h into the projectinclude_directories(include)#However, the file(GLOB...) allows for wildcard additions:file(GLOB SOURCES "src/*.cpp")#Generate the static library from the sourcesadd_library(testStudent STATIC ${SOURCES})#Set the location for library installation -- i.e., /usr/lib in this case# not really necessary in this example. Use "sudo make install" to applyinstall(TARGETS testStudent DESTINATION /usr/li
12345678910111213141516

可以看出,只需將add_library中的shared改為static即可。 編譯結果如下:

  自動化構建系統CMake怎么用


例5:使用靜態庫或動態庫

下邊我們來測試一下我們例3的結果,代碼和CMakeList.txt如下:

#include"Student.h"int main(int argc, char *argv[]){
  Student s("Joe");
  s.display();
  return 0;
}
1234567
cmake_minimum_required(VERSION 2.8.9)
project (TestLibrary)#For the shared library:set ( PROJECT_LINK_LIBS libtestStudent.so )
link_directories( ~/exploringBB/extras/cmake/studentlib_shared/build )#For the static library:#set ( PROJECT_LINK_LIBS libtestStudent.a )#link_directories( ~/exploringBB/extras/cmake/studentlib_static/build )include_directories(~/exploringBB/extras/cmake/studentlib_shared/include)

add_executable(libtest libtest.cpp)
target_link_libraries(libtest ${PROJECT_LINK_LIBS} )
123456789101112131415

結果如下(CMakeList.txt中的目錄要根據自己的情況改一下): 自動化構建系統CMake怎么用 

成功了!!

以上是“自動化構建系統CMake怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹿泉市| 安庆市| 富平县| 老河口市| 虎林市| 栖霞市| 岑溪市| 威远县| 荔波县| 舞阳县| 霍林郭勒市| 休宁县| 安福县| 南投市| 惠来县| 五大连池市| 铅山县| 内丘县| 湘潭市| 嘉义县| 徐汇区| 兴安县| 类乌齐县| 黄骅市| 建平县| 广昌县| 昌图县| 富阳市| 宁蒗| 乌兰县| 大足县| 大同县| 桑日县| 郯城县| 平湖市| 青铜峡市| 察隅县| 灵山县| 金坛市| 甘泉县| 沙河市|