当我将源文件添加到目标时,如果它们来自C / C ++文件扩展名,则会自动识别它们。我想要完成的是,如果我放入源xxx.foo,所有.foo文件都使用一组预定义的编译器命令进行处理。
我知道要走的路是使用add_custom_command,但我看过的所有示例都使用的固定文件名就像这里使用的那样http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_generate_a_source_file_during_the_build.3F
关于解决问题的正确方法的任何想法?
答案 0 :(得分:2)
解决问题的一种方法是用包装函数或宏替换普通的CMake add_executable
和add_library
命令,这些函数或宏对.foo扩展名的文件进行特殊处理,并传递其他参数和选项到标准add_executable
或add_library
命令。 E.g:
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编译器。