CMake 学習 (3): ファイル検索

プロジェクト内にあると源文件很多、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_directorysrc ディレクトリ内のすべてを取得し源文件、その後、 を使用しadd_executableて実行可能ファイルを生成します。

方法2

プロジェクト内にソース ファイルが多数ある場合、CMakeLists.txt ファイルを作成するときに、プロジェクト ディレクトリ内のすべてのファイルを 1 つずつ一覧表示することは不可能であり、非常に面倒です。したがって、CMake で提供されるコマンドは次の搜索文件とおりです file(もちろん、検索以外にもファイルを使用して他のことを行うこともできます)。

file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型) 
  • GLOB: 指定したディレクトリ内で見つかった条件を満たすすべてのファイル名のリストを生成し、変数に格納します。
  • GLOB_RECURSE:递归搜索ディレクトリを指定し、検索された条件を満たすファイル名のリストを生成し、変数に格納します。
  • 要搜索的文件路径和文件类型: ワイルドカードを組み合わせて、サフィックスが付いているファイル*など、特定の形式のファイルを検索します。ファイルが に対応する場合、ヘッダー ファイルの場合は、.cpp*.cppc*.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/

おすすめ

転載: blog.csdn.net/weixin_38346042/article/details/131057211