CMAKE(3)—— aux_source_directory包含目錄下所有文件以及自動構建系統
aux_source_directory 查找在某個路徑下的所有源文件。
aux_source_directory(< dir > < variable >)
1
搜集所有在指定路徑下的源文件的文件名,將輸出結果列表儲存在指定的變量中。該命令主要用在那些使用顯式模板實例化的工程上。模板實例化文件可以存儲在Templates子目錄下,然后可以使用這條命令自動收集起來;這樣可以避免手工羅列所有的實例。
使用該命令來避免為一個庫或可執行目標寫源文件的清單,是非常具有吸引力的。
但是如果該命令貌似可以發揮作用,那么CMake就不需要生成一個感知新的源文件何時被加進來的構建系統了(也就是說,新文件的加入,并不會導致CMakeLists.txt過時,從而不能引起CMake重新運行)。
正常情況下,生成的構建系統能夠感知它何時需要重新運行CMake,因為需要修改CMakeLists.txt來引入一個新的源文件。當源文件僅僅是加到了該路徑下,但是沒有修改這個CMakeLists.txt文件,使用者只能手動重新運行CMake來產生一個包含這個新文件的構建系統。
FILE (GLOB ALL_SOURCES "*.cpp" "*.c" "./AFolder/*.cpp" )
FILE (GLOB ALL_INCLUDES "*.hpp" "*.h" "./AFolder/*.hpp" "./AFolder/*.h" )
SET (ALL_SRCS
${ALL_SOURCES}
${ALL_INCLUDES}
)
1
2
3
4
5
6
7
8
自動構建系統例子
https://blog.csdn.net/libaineu2004/article/details/78995740
./Demo4
|
+--- main.cc
|
+--- config.h.in
|
+--- math/
|
+--- MathFunctions.cc
|
+--- MathFunctions.h
1
2
3
4
5
6
7
8
9
10
11
config.h.in
#cmakedefine USE_MYMATH
1
這樣 CMake 會自動根據 CMakeLists 配置文件中的設置自動生成 config.h 文件。
#CMake 最低版本號要求
cmake_minimum_required (VERSION 2.8)
#項目信息
project (Demo4)
#加入一個配置頭文件,用于處理 CMake 對源碼的設置
configure_file (
"${PROJECT_SOURCE_DIR}/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
)
#是否使用自己的 MathFunctions 庫,和.h中#define的頭文件不一樣
option (USE_MYMATH
"Use provided math implementation" ON)
#是否加入 MathFunctions 庫
if (USE_MYMATH)
include_directories ("${PROJECT_SOURCE_DIR}/math")
add_subdirectory (math)
set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
#查找當前目錄下的所有源文件將名稱保存到 DIR_SRCS 變量
aux_source_directory(. DIR_SRCS)
#指定生成目標
add_executable(Demo ${DIR_SRCS})
target_link_libraries (Demo ${EXTRA_LIBS})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
自動生成的config.h為
#define USE_MYMATH
1
#include
#include
#include "config.h"
#ifdef USE_MYMATH
#include "math/MathFunctions.h"
#else
#include
#endif
int main(int argc, char *argv[])
{
if (argc < 3){
printf("Usage: %s base exponent \n", argv[0]);
return 1;
}
double base = atof(argv[1]);
int exponent = atoi(argv[2]);
#ifdef USE_MYMATH
printf("Now we use our own Math library. \n");
double result = power(base, exponent);
#else
printf("Now we use the standard library. \n");
double result = pow(base, exponent);
#endif
printf("%g ^ %d is %g\n", base, exponent, result);
return 0;
}
————————————————
原文鏈接:https://blog.csdn.net/u012564117/article/details/95085360
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。