2014-01-07 104 views
4

我有一個CMake C++項目,它包含一個庫和多個可執行應用程序。該庫包含許多文件並且有條件地取決於用戶是否想要GPU加速,庫中的文件列表應該不同,例如,有條件地將文件添加到C++項目中的庫

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.hfile1.cc所以我會很強烈希望避免重複文件列表的那樣。我寧願喜歡這樣的工作(但不)例如

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

回答

8

使用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是真的,那將更新它。 然後從變量的內容創建您的庫。

+1

不錯!謝謝! –

相關問題