2011-01-12 106 views
3

當我將源文件添加到目標時,如果它們來自C/C++文件擴展名,它們將自動識別。我想要完成的是,如果我放入源xxx.foo,所有的.foo文件都用一組預定義的編譯器命令處理。CMake自動識別新文件擴展名

我知道,我所看到的方式去使用add_custom_command但所有的例子都使用固定的文件名喜歡這裏http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_generate_a_source_file_during_the_build.3F

使用有關的權利的方法解決問題的任何想法的人?來解決這個問題

回答

2

一種方法是用它做文件的特殊處理,以與包含.foo擴展,並通過傳給其他參數和選項的標準add_executable或包裝函數或宏來代替普通的CMake add_executableadd_library命令add_library命令。例如:

set (FOO_SRCS "main.cpp" "module.cpp" "xxx.foo" "yyy.foo") 
foo_add_executable(fooexec ${FOO_SRCS}) 
foo_add_library(foolib ${FOO_SRCS}) 

FindCUDA標準CMake模塊採用該方法。它添加了CUDA_ADD_EXECUTABLE和CUDA_ADD_LIBRARY命令,該命令將擴展名爲.cu的源文件提供給NVIDIA C編譯器。

-1

您是否考慮過使用文件通配符?例如。

file(GLOB MY_FOO_FILES *.foo) 
add_library(foolib "main.cpp" ${MY_FOO_FILES}) 

或者你可以通過自定義命令運行每個文件。