当我将源文件添加到目标时,如果它们来自 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
关于正确解决问题的方法有什么想法吗?
最佳答案
解决该问题的一种方法是用包装函数或宏替换普通的 CMake add_executable
和 add_library
命令,这些函数或宏对扩展名为 .foo 的文件进行特殊处理并将其他参数和选项传递给标准 add_executable
或 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 编译器。
关于CMake 自动识别新的文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4671862/