2011-01-12 29 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}) 

或者你可以通过自定义命令运行每个文件。