プロジェクト内にあると源文件很多
、CMakeLists.txtファイルを書くときに不可能将项目目录的各个文件一一罗列出来
面倒で現実的ではありません。したがって、CMake で提供されるコマンドでは、コマンドまたはファイル コマンド搜索文件
を使用できます。aux_source_directory
方法1
CMake のaux_source_directory
コマンドを某个路径下的所有源文件
(.c,.cxx,.cpp
など) を検索します。コマンドの形式は次のとおりです。
aux_source_directory(< dir > < variable >)
dir:
検索するディレクトリvariable:
dirディレクトリから検索したソースファイルのリストをこの変数に格納します。
cmake_minimum_required(VERSION 3.0)
project(CALC)
include_directories(${
PROJECT_SOURCE_DIR}/include)
# 搜索 src 目录下的源文件
aux_source_directory(${
CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)
add_executable(app ${
SRC_LIST})
- を使用して
aux_source_directory
src ディレクトリ内のすべてを取得し源文件
、その後、 を使用しadd_executable
て実行可能ファイルを生成します。
方法2
プロジェクト内にソース ファイルが多数ある場合、CMakeLists.txt ファイルを作成するときに、プロジェクト ディレクトリ内のすべてのファイルを 1 つずつ一覧表示することは不可能であり、非常に面倒です。したがって、CMake で提供されるコマンドは次の搜索文件
とおりです file
(もちろん、検索以外にもファイルを使用して他のことを行うこともできます)。
file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
GLOB:
指定したディレクトリ内で見つかった条件を満たすすべてのファイル名のリストを生成し、変数に格納します。GLOB_RECURSE
:递归搜索
ディレクトリを指定し、検索された条件を満たすファイル名のリストを生成し、変数に格納します。要搜索的文件路径和文件类型
: ワイルドカードを組み合わせて、サフィックスが付いているファイル*
など、特定の形式のファイルを検索します。ファイルが に対応する場合、ヘッダー ファイルの場合は、.cpp
*.cpp
c
*.c
*.h
カレントディレクトリのsrcディレクトリ内のすべてのソースファイルを検索し、変数に格納します。
file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB MAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
-
CMAKE_CURRENT_SOURCE_DIR
マクロは、現在アクセスされているCMakeLists.txt
ファイルが。 -
検索するファイルのパスと種類については、二重引用符を追加するかどうかを指定できます。
file(GLOB MAIN_HEAD "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")
ケース
- 次を使用して
aux_source_directory
ソース ファイルを検索します
cmake_minimum_required(VERSION 3.15)
project(test)
#set(SRC add.cpp div.cpp mult.cpp sub.cpp)
aux_source_directory(${
PROJECT_SOURCE_DIR} SRC) # 搜索工程目录下的所有源文件
set(EXECUTABLE_OUTPUT_PATH /home/yws/aa/bb/cc)
set(CMAKE_CXX_STANDARD 11)
add_executable(app ${
SRC})
- 現在のプロジェクトに
2个
ソース ファイル ディレクトリがある、それらはそれぞれ目录A
とです目录B
。この時点で、ディレクトリ A とディレクトリ B にあるすべてのソース ファイルを検索する必要があります。これを実現するにはどうすればよいでしょうか? - 2 と書き
aux_source_directory
、ソース ファイルを個別に検索しますA,B目录
。検索が完了したら、set
コマンドを使用して 2 つのソース ファイル ディレクトリを検索し、ソース ファイルを取得してマージします。
set(SRC ${SRC_A} ${SRC_B} )
- (2)
file
コマンドを使用する
cmake_minimum_required(VERSION 3.15)
project(test)
#set(SRC add.cpp div.cpp mult.cpp sub.cpp)
#aux_source_directory(${PROJECT_SOURCE_DIR} SRC) # 搜索工程目录下的所有源文件
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
set(EXECUTABLE_OUTPUT_PATH /home/yws/aa/bb/cc)
set(CMAKE_CXX_STANDARD 11)
add_executable(app ${SRC})
PROJECT_SOURCE_DIR
どちらもファイルが配置されているパスをCMAKE_CURRENT_SOURCE_DIR
参照しており、これら 2 つのマクロに格納されている値は実際には同じですCMakeLists.txt
- ファイルを再帰的に検索する必要がある場合は、次を使用する必要があります。
GLOB_RECURSE
参考
プログラミングが大好きな CMake: https://subingwen.cn/cmake/CMake-primer/