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

Sky*_*ker 4 c++ cmake

我有一个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()
Run Code Online (Sandbox Code Playgroud)

这是一种方法,但问题是我有大量的文件,file1.h file1.cc因此我非常强烈希望避免像这样重复文件列表.我宁愿喜欢这样的东西(但不是),例如

add_library(my_library
    file1.h
    file1.cc
    if (GPU_ACCELERATED) 
       gpu_file2.h
       gpu_file2.cc
    endif()
 )
Run Code Online (Sandbox Code Playgroud)

Gui*_*ume 15

使用该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})
Run Code Online (Sandbox Code Playgroud)

这将定义一个my_SOURCES变量,如果GPU_ACCELERATED为true则会更新它.然后根据变量的内容创建库.