CMake - 为文件夹中的所有 *.cpp 文件创建可执行文件

CMake - Create executable for all *.cpp file in folder

我有这个文件夹树:

benchmark/
├─ pair/
│  ├─ benchmark_create.cpp
│  ├─ benchmark_insert.cpp
│  ├─ benchmark_remove.cpp
├─ set/
├─ CMakeLists.txt

这是我当前的 CMakeLists.txt 文件内容:

add_executable(dbg_pair_creation pair/benchmark_creation)
target_link_libraries(pair_creation benchmark::benchmark)

add_executable(dbg_pair_insert pair/benchmark_insert)
target_link_libraries(pair_insert benchmark::benchmark)

add_executable(dbg_pair_remove pair/benchmark_remove)
target_link_libraries(pair_remove benchmark::benchmark)

有一种 compacxt 方法可以做同样的事情,并将此可执行文件放在名称为 pair 的文件夹中,这是源文件夹的名称?

您可以使用 foreach 循环。

set(benchmarks creation insert remove)
foreach (benchmark IN LISTS benchmarks)
  add_executable(dbg_pair_${benchmark} pair/benchmark_${benchmark}.cpp)
  target_link_libraries(dbg_pair_${benchmark} PRIVATE benchmark::benchmark)
  set_property(
    TARGET dbg_pair_${benchmark}
    PROPERTY RUNTIME_OUTPUT_DIRECTORY 
             "${CMAKE_CURRENT_BINARY_DIR}/dbg_pair_${benchmark}"
  )
endforeach ()

然后您只需在添加新基准时添加到 benchmarks 列表即可。