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

标签 sql cmake c-preprocessor

我最初在 CMake 上问过这个问题邮件列表:How to configure target or command to preprocess C file?

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

预处理器的输入是 SQL 文件与 C 预处理器 使用的指令,如 #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。

关于sql - 如何配置 CMake 目标或命令来预处理 C 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383314/

相关文章:

php - sql 中的最大值到最小值排序无法正常工作

c++ - 为什么 CMake 设计成在安装时删除运行时路径

android - 如何安装 Android Studio 2.2 CMake 包/工具?

c - 如何为静态嵌入式操作系统中的资源创建复杂的宏检查?

MySQL - 计算按国家分组的男性和女性人数

mysql - SQL 透视和计算存储为字符串的日期之间的差异 - MySQL

mysql - 如何选择用户尚未投票的所有项目(投票系统)

c++ - 如何使用 CMake 将 C++ 程序与 Boost 链接

c# - 是否可以根据条件编译符号(预处理器常量)的值在 C# 项目中添加引用?

ios - 在 Objective C 中对宏值进行字符串化?