本篇介紹當源文件與編譯文件獨立存放時,如何編寫CMakeLists.txt。
1只使用一個CMakeLists.txt
1.1 目錄結構
文件目錄結構如下,sum.c、sum.h、sub.c、sub.h和main.c的代碼內容見前面的文章。
其中sum.h和sub.h放到include這個文件夾中,main.c、sum.c和sub.c放到src這個文件夾中。
在整個工程中,只有一個CMakeLists.txt:

1.2 CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project (sum_sub_test)
include_directories (include)
aux_source_directory (src SRC_LIST)
add_executable (sum_sub_test ${SRC_LIST})
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
最后一句是一個新的知識點:
EXECUTABLE_OUTPUT_PATH:CMake自帶的預定義變量,表示可執行文件的存放位置
PROJECT_SOURCE_DIR:CMake自帶的預定義變量,表示工程的根目錄
set指令:用于定義變量,即指定可執行文件存放在工程根目錄下的bin目錄中
1.3 運行測試

2 頂層+子層CMakeLists.txt
一個工程,可以不只有一個CMakeLists.txt,通過層級間的管理,可以實現頂層對底層的調用。
2.1 目錄結構
文件目錄結構如下,sum.c、sum.h、sub.c、sub.h和main.c的代碼內容見前面的文章。
其中sum.h和sub.h放到include這個文件夾中,main.c、sum.c和sub.c放到src這個文件夾中。
在整個工程中,外出有一個CMakeLists.txt,子層src目錄中也有一個CMakeLists.txt:

2.2 CMakeLists.txt
2.2.1 頂層CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project (sum_sub_test)
add_subdirectory (src)
最后一句是一個新的知識點:
add_subdirectory():向當前工程添加存放源文件的子目錄
這里指定的是在src目錄下存放了源文件
當執行cmake指令時,就會進入src目錄下去找下一級的CMakeLists.txt
所以在src目錄下也必須要有一個子層的CMakeLists.txt
2.2.2 子層CMakeLists.txt
include_directories (../include)
aux_source_directory (. SRC_LIST)
add_executable(sum_sub_test ${SRC_LIST})
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
最后的set語句剛才已經見過了,就是指定可執行文件的輸出位置。
2.3 運行測試

3 總結
本篇介紹了源文件與編譯文件獨立存放時,如何編寫CMakeLists.txt。

cmake_minimum_required (VERSION 2.8)
project (sum_sub_test)
include_directories (include)
aux_source_directory (src SRC_LIST)
add_executable (sum_sub_test ${SRC_LIST})
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
新引入的知識點是最后這句,通過set來指定可執行文件的輸出位置:
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
以及使用頂層+子層的CMakeLists.txt時,通過add_subdirectory來指定子層源文件的目錄:
add_subdirectory (src)
并在相應的子層目錄中再編寫CMakeLists.txt。
-
Linux
+關注
關注
87文章
11351瀏覽量
210497 -
編譯
+關注
關注
0文章
661瀏覽量
33066 -
CMake
+關注
關注
0文章
28瀏覽量
1309
發布評論請先 登錄
相關推薦
Windows下編譯工具CMake的安裝和最簡使用

【DragonBoard 410c試用體驗】使用cmake編譯opencv工程
請問全志A40i能否單獨編譯驅動模塊?如何編譯?
aarch64-linux-gnu-gcc能不能編譯文件系統
在Linux下如何使用CMake編譯程序

CMake構建后的項目結構解析

評論