如何使用配置本身的外部工具生成源代码?
How to generate source code using external tool from configure itself?
我需要在我的构建中从 Google 协议缓冲区规范 .proto
生成 .c
和 .h
。
目前我遵循的方法是手动将依赖项记录到我生成的 .h
文件中。也就是我加了几个:
somefilethatincludesthegenerated.$(OBJEXT): mygenerated.h
并且与我构建 mygenerated.h
和 mygenerated.c
的规则一起工作。我知道 BUILT_SOURCES
,但这只适用于 make all
,不适用于 make mytarget
。
所以我想探索从 configure
生成源代码的可能性,如 Automake manual 中所述。
AC_CONFIG_FILES
允许我从 mygenerated.h.in
生成 mygenerated.h
但实际上这个文件并不是要从模板生成的。这些文件将使用名为 protoc
的外部工具生成。在我的 Makefile.am
文件中,构建生成源的规则是:
mygenerated.c mygenerated.c: myprotofile.proto
$(PROTOC) --proto_path=$(srcdir) --c_out=$(builddir) $^
如何从 configure
自身内部实现类似的东西?。我所追求的是始终在任何其他目标之前构建生成的源(BUILT_SOURCES
不适用于 all
、check
和其他一些目标以外的目标)
我使用 AC_CONFIG_COMMANDS
而不是 AC_CONFIG_FILES
成功了。
因此 运行 protoc
(或本例中的 protoc-c
)从 configure
添加以下内容到 configure.ac
:
AC_CONFIG_COMMANDS([src/mygenerated.h],
[protoc-c --proto_path=src --c_out=src src/myprotofile.proto])
然后当你 运行 ./configure
你会看到
config.status: executing src/mygenerated.h commands
注意修改.proto
文件需要重新运行./configure
。这是 "generate sources from configure" 方法的缺点。
我需要在我的构建中从 Google 协议缓冲区规范 .proto
生成 .c
和 .h
。
目前我遵循的方法是手动将依赖项记录到我生成的 .h
文件中。也就是我加了几个:
somefilethatincludesthegenerated.$(OBJEXT): mygenerated.h
并且与我构建 mygenerated.h
和 mygenerated.c
的规则一起工作。我知道 BUILT_SOURCES
,但这只适用于 make all
,不适用于 make mytarget
。
所以我想探索从 configure
生成源代码的可能性,如 Automake manual 中所述。
AC_CONFIG_FILES
允许我从 mygenerated.h.in
生成 mygenerated.h
但实际上这个文件并不是要从模板生成的。这些文件将使用名为 protoc
的外部工具生成。在我的 Makefile.am
文件中,构建生成源的规则是:
mygenerated.c mygenerated.c: myprotofile.proto
$(PROTOC) --proto_path=$(srcdir) --c_out=$(builddir) $^
如何从 configure
自身内部实现类似的东西?。我所追求的是始终在任何其他目标之前构建生成的源(BUILT_SOURCES
不适用于 all
、check
和其他一些目标以外的目标)
我使用 AC_CONFIG_COMMANDS
而不是 AC_CONFIG_FILES
成功了。
因此 运行 protoc
(或本例中的 protoc-c
)从 configure
添加以下内容到 configure.ac
:
AC_CONFIG_COMMANDS([src/mygenerated.h],
[protoc-c --proto_path=src --c_out=src src/myprotofile.proto])
然后当你 运行 ./configure
你会看到
config.status: executing src/mygenerated.h commands
注意修改.proto
文件需要重新运行./configure
。这是 "generate sources from configure" 方法的缺点。