c - 是否可以让 Gyp 生成预(或后)构建步骤?

标签 c node-gyp post-build-event gyp pre-build-event

我正在使用 gyp生成 Visual Studio 项目、生成文件和 Xcode 项目。

我想要一个预构建步骤调用一个命令行工具来生成一些我稍后编译的代码,这可能吗?

顺便说一句,在 cmake我在我依赖的项目上使用后期构建步骤来执行此操作,因为那里没有预构建,因此后期构建步骤也可以。

我可以看到我可以使用 <!() 在生成时调用任意命令语法,但我真的更喜欢一次生成项目,然后在编译时进行代码生成步骤。

我使用 actions 找到了某个地方...

我有这个小应用程序:

主.c

#include <stdio.h>

int main() {
    #include "some_output"
    return 0;
}

还有这个输入文件

一些输入

printf("Hello World!\n");

因此我可以像这样在我的 .gyp 文件中伪造一些代码生成,尽管是特定于 Windows 的代码生成(即将文件打印到标准输出并重定向回文件,是的,这很愚蠢,但它很有希望说明了这一点):

gypping.gyp

{
    'targets': [
    {
        'target_name': 'gypping',
        'type': 'executable',
        'sources': [
            'main.c',
            '<(INTERMEDIATE_DIR)/some_output',
        ],
        'actions': [{
                'action_name': 'create_something_generated',
                'inputs': [ 
                    'some_input'
                ],
                'outputs': [
                    '<(INTERMEDIATE_DIR)/some_output',
                ],
                'action': ['type', '<@(_inputs)', '>', '<@(_outputs)'],
            },
        ],
      },
    ],
  }

当我在 Visual Studio 中构建时(已运行 gyp --depth=.),这似乎几乎可以工作,但我收到以下错误:

1>------ Build started: Project: gypping, Configuration: Default Win32 ------
1>  create_something_generated
1>  '"C:\dev\code\Sandpit\gypping\.\setup_env.bat"' is not recognized as an internal or external command,
1>  operable program or batch file.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(171,5): error MSB6006: "cmd.exe" exited with code 1.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我找不到 setup_env.bat在我的道路上。

我创建了一个空的 setup_env.bat 文件并通过删除 > 简化了操作(我想转义会出错)。现在我明白了:

'bash' is not recognized as an internal or external command,

我在 Windows 上没有 bash。

我认为 Gyp 对我来说已经完成了,我想我会坚持使用 cmake。

最佳答案

actions 正是您想要的。它们运行预编译,Git 文档显示它们用于生成要在编译步骤中使用的文件。

我安装了适用于 Windows 的 Git 并使用它,而不是 cygwin,通过 Visual Studio 运行生成的操作。这是我的 setenv.bat:

REM Set up to use Git Bash for running "cygwin" actions.

REM CD to where this file lives to avoid path relativization problems.
cd %~dp0

set PATH=%PATH%;C:\Program Files\Git\bin

我还看到 Git for Windows 安装在 %USERPROFILE%\AppData\Local\Programs\Git。我不知道是什么原因导致不同的位置。根据需要更改上述 PATH

我正在寻找如何生成后期构建步骤的答案

关于c - 是否可以让 Gyp 生成预(或后)构建步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348346/

相关文章:

c - 将文件的字母计数存储到数组中

c++ - mac 上的 node-gyp 构建错误 "calling a protected constructor of class ' v8::HandleScope'"

karma-runner - 如何在代理后面设置node-gyp

ubuntu - zipalign 正在手动工作,但在 Jenkins 后期构建下失败

c# - 在构建后事件中更新本地 nuget 包

c - C语言数组中未初始化元素的取值

c - 我在哪里可以找到 unix 上 C 中的头文件

c - 为什么在 c 中定义的常量末尾使用 'e0'?

c++ - 在没有node-gyp的目标平台上编译C/C++文件

qt - 如何在不使用 QtCreator 的情况下将 dll 文件复制到 Qt 中的输出目录?