sql – 如何配置CMake目标或命令来预处理C文件?

前端之家收集整理的这篇文章主要介绍了sql – 如何配置CMake目标或命令来预处理C文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最初在 CMake邮件列表上提出了这个问题: How to configure target or command to preprocess C file?

我正在将基于GNU Autotools的构建配置移植到CMake,我必须处理C预处理以生成文件.

预处理器的输入是使用C预处理程序指令的sql文件,如#include“another.sql”等.

目前,Makefile使用以下规则生成sql文件作为输出

myfile.sql: myfile.sql.in.c
    cpp -I../common $< | grep -v '^#' > $@

因此,myfile.sql意味着是构建过程的产品之一,类似于共享库或可执行文件.

我应该用什么CMake工具来达到同样的效果

我不清楚我是否应该使用add_custom_command,add_custom_target或两者结合使用.

显然,我正在寻找一种可移植的解决方案,至少可以使用GNU GCC和Visual Studio工具集.我认为我必须定义特定于平台的自定义命令,一个用于cpp预处理器,一个用于cl.exe / P.

或者,CMake是否为C预处理器提供任何类型的抽象?

我扫描了档案,但我只发现了基于make功能的fortran文件解决方案的预处理:make myfile.i
所以,这并不是我想要的.

更新:Added answer基于solution received from Petr Kmoch在CMake邮件列表上.

解决方法

要利用CMake’make myfile.i功能,您可以这样做:
add_library(sql_cpp_target EXCLUDE_FROM_ALL myfile.sql.in.c)

现在运行make myfile.sql.in.c.i将使用定义的CMAKE_C_FLAGS为您生成预处理源.可以更改预处理文件输出名称和目录.

无论如何,你需要将这些make调用包装到add_custom_target(ALL …)中,以使CMake在构建期间运行它们.

在目标定义中使用CMAKE_MAKE_PROGRAM变量.

如果要从构建工具中抽象出来,可以调用cmake本身来为您构建目标.定义自定义目标时,请使用${CMAKE_COMMAND} –build ${CMAKE_BINARY_DIR} –target targetname.

或者,您可以只运行指定编译器的add_custom_command()来预处理文件并将它们放在适当的位置.但这似乎不太灵活,IMO.

猜你在找的MsSQL相关文章