CMake方式編譯


【1】CMake基礎

CMake是一種跨平台編譯工具

CMake主要是編寫CMakeLists.txt文件

通過cmake命令將CMakeLists.txt文件轉化為make所需的Makefile文件

再用make命令編譯源代碼生成可執行程序或庫文件

【2】示例工程

(1)項目結構

build目錄 用來構建項目(編譯構建中間文件等)

include目錄 放置頭文件。myprint.h頭文件,其內容如下:

src目錄 放置源代碼實現文件。myprint.cpp文件,內容如下:

hello.cpp文件,內容如下:

(2)CMake方式編譯生成庫文件

為了利用CMake將項目編譯成動態庫提供給其他項目使用:

首先,我們要創建CMakeLists.txt文件,簡單來說CMake就是我們把編譯信息錄入。

cmake命令根據CMakeLists.txt生成編譯需要的MakeFile文件。

CMakeLists.txt文件具體內容編寫如下:

 1 # 指定CMake編譯最低要求版本
 2 CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
 3 # 給項目命名
 4 PROJECT(MYPRINT)
 5 # 收集c/c++文件並賦值給變量SRC_LIST_CPP  ${PROJECT_SOURCE_DIR}代表區當前項目錄
 6 FILE(GLOB SRC_LIST_CPP ${PROJECT_SOURCE_DIR}/src/*.cpp)
 7 FILE(GLOB SRC_LIST_C ${PROJECT_SOURCE_DIR}/src/*.c)
 8 # 指定頭文件目錄
 9 INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
10 # 指定生成庫文件的目錄
11 SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
12 # 取變量SRC_LIST_CPP 與 SRC_LIST_C的值 
13 # 指定生成libmyprint 動態庫(默認為靜態庫) 
14 # SHARED指定生成庫類型為動態庫 STATIC為靜態庫
15 ADD_LIBRARY(myprint SHARED ${SRC_LIST_CPP} ${SRC_LIST_C})

編寫好CMakeLists.txt文件cd到項目build執行cmake命令,如下圖:

將會在build目錄下生成Makefile文件

再執行make命令項目就會開始編譯,在項目lib目錄下生成libmyprint.so文件。

生成的動態庫文件怎么去鏈接使用呢?

(3)CMake方式鏈接使用庫文件

直接在src目錄下新建 源文件hello.cpp來應用libmyprint.so庫

重新編寫CMakeLists.txt文件,內容如下:

 1 # cmake版本需求
 2 CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
 3 # 工程名稱
 4 PROJECT(HELLO)
 5 # SOURCE 將hello.cpp賦值給SOURCE變量
 6 SET(SOURCE ${PROJECT_SOURCE_DIR}/src/hello.cpp)
 7 # 指定頭文件目錄
 8 INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
 9 # 指定鏈接庫文件目錄
10 LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)
11 # 將hello.cpp生成可執行文件hello
12 ADD_EXECUTABLE(hello ${SOURCE})
13 # 指定hello 鏈接庫myprint
14 TARGET_LINK_LIBRARIES(hello myprint)

cd到build目錄,執行cmake命令,再執行make命令,將在build目錄下生成可執行文件hello。

如下圖:

執行hello,運行結果:hello world!

 

Good Good Study, Day Day Up.

順序 選擇 循環 總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM