您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“自動化構建系統CMake怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“自動化構建系統CMake怎么用”這篇文章吧。
CMake 是一個跨平臺的自動化構建系統,它使用一個名為 CMakeLists.txt 的文件來描述構建過程,可以產生標準的構建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。
源代碼只有一個文件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文件
在例1中完全體現不出cmake的任何優勢,用g++一行可以解決的問題我們繞了一大圈。可是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有如下改變:
有了前兩個例子的基礎,接下來的例子我們只需要看一下目錄結構和CMakelist.txt.
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
兩個重要變化:
基于例3,我們編譯一個靜態庫
將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即可。 編譯結果如下:
下邊我們來測試一下我們例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怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。