2011-09-05 161 views
1

我在C中有一个数值向量实现;整个实现基于TYPE,然后我执行s/TYPE/double/g获取double的实现,并使用s/TYPE/int /获取int实现。直到现在,我已经基于一个微小的sed脚本进行过滤,该脚本通过CMakeLists.txt文件中的add_custom_command()引用。这在linux上运行良好,但是当试图生成Visual Studio解决方案时,它失败了(在Visual Studio中)。使用CMake过滤?

由于我正在执行的过程(在文件中搜索替换并将输出存储为新文件)非常简单,我想也许可以使用内置CMake命令来实现这一点?

乔金 -

+0

是否要生成过滤文件作为生成的一部分或由cmake命令生成的文件也适用于您? –

+0

我希望文件生成是构建过程的一部分;但我知道如果我对配置时间文件几代人感到满意,可以使用configure_file()? – user422005

回答

1

在纯CMake的你至少有3种方式去:

1)configure_file命令

  • 是简单的内容替换,当你只需要内替代一些占位符有用基于当前项目配置的模板文件;
  • cmake将自动生成对模板文件的依赖关系,并将在模板更改时重新生成您的文件。

2)可以使用FILE READFILE STRINGSFILE WRITE命令期间cmake的配置步骤进行任何改造。

  • 任何自定义转换可能

  • 难以维持;
  • 值得cmake表现;
  • 无法自动监控模板文件更改。

3)如果是绝对必要的构建过程中生成此文件,那么您可以在过程脚本模式(cmake -P)与add_custom_command使用的cmake:

add_custom_command(OUTPUT vector.c 
        COMMAND $(CMAKE_COMMAND) -DTEMPLATE:STRING=vector.template -P genscript.cmake 
        DEPENDS vector.template genscript.cmake) 

哪里genscript.cmake是辅助脚本,你需要写。它应该产生vector.c与1)或2)方法在上面收听。

+0

非常感谢1)对我来说很好,只要依赖模板建立。 – user422005