我有一个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()
)
答案 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
为真,则会更新它。
然后根据变量的内容创建库。