使用CMake过滤?

时间:2011-09-05 15:46:59

标签: cmake

我在C中有一个数字向量实现;整个实现基于TYPE然后我做s / TYPE / double / g来获得double和s / TYPE / int /的实现来获得int的实现。到目前为止,我已将过滤基于一个小的sed脚本,该脚本使用CMakeLists.txt文件中的add_custom_command()引用。这在linux上运行良好,但在尝试生成Visual Studio解决方案时失败(在Visual Studio中)。

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

乔金姆

1 个答案:

答案 0 :(得分:1)

在纯粹的cmake中,您至少有3种方法:

1)configure_file命令

    当您只需要根据当前项目配置替换模板文件中的某些占位符时,
  • 对于简单替换非常有用;
  • cmake将自动生成对模板文件的依赖,并将在模板更改时重新生成文件。

2)可以使用FILE READFILE STRINGSFILE WRITE命令在cmake配置步骤中进行任何转换。

  • 可以进行任何自定义转换

但是

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

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

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)上面听过的方法。