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

时间:2014-01-07 09:11:52

标签: 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()

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

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

1 个答案:

答案 0 :(得分: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})

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