有条件地将文件添加到项目中C++库中

Conditionally add files to library in C++ project

本文关键字:项目 C++ 库中 添加 文件 有条件      更新时间:2023-10-16

我有一个CMake C++项目,它由一个库和多个可执行应用程序组成。该库包含许多文件,并且有条件地取决于用户是否想要GPU加速,库中的文件列表应该不同,例如

if (GPU_ACCELERATED) 
   add_library(my_library
      file1.h
      file1.cc
      gpu_file2.h
      gpu_file2.cc
   )
else()
   add_library(my_library
      file1.h
      file1.cc
   )
endif()

这是一种方法,但问题是我有大量文件,而不仅仅是file1.h file1.cc因此我非常希望避免像这样复制文件列表。我宁愿希望这样的东西工作(但没有),例如

add_library(my_library
    file1.h
    file1.cc
    if (GPU_ACCELERATED) 
       gpu_file2.h
       gpu_file2.cc
    endif()
 )

使用 set 命令创建和更新 CMake 变量:

set(my_SOURCES file1.h file1.cc)
if (GPU_ACCELERATED)
    set(my_SOURCES ${my_SOURCES} gpu_file2.h gpu_file2.cc)
endif()
add_library(my_library ${my_SOURCES})

这将定义一个my_SOURCES变量,如果GPU_ACCELERATED为 true,它将更新它。然后从变量的内容创建库。