如何在 Makefile.am 中发出新的编译命令?
How to issue a new compile command in Makefile.am?
我正在构建一个如下所示的库(使用 Autotools)。当我将 *.cpp 文件添加到 libmytest_la_SOURCES
.
时,库的构建工作正常
lib_LTLIBRARIES = libmytest.la
libmytest_la_SOURCES = test.capnp.c++
libmytest_la_CXXFLAGS = -I/usr/include -I$(top_srcdir)/src/includes
libmytest_la_LDFLAGS = -version-info 0:0:0 -L/usr/lib64
libmytest_la_LIBADD = -lcapnp
问题是在进行正常的编译过程之前,我需要调用第三方编译器来生成代码。以下 capnp
工具将生成一个名为 test.capnp.c++
.
的 c++ 输出文件
capnp compile -oc++ test.capnp
如果我将那个 (test.capnp.c++
) 的输出插入到上面的 makefile 中,我的库就建立好了。我不明白的是如何将该命令调用到 Makefile.am 中以生成所需的源文件并将其插入到 libmytest_la_SOURCES
变量中。
有什么想法吗?
Automake 不直接支持 capnp
,添加对新语言或工具的支持需要破解程序。但是你 可以 在你的 Makefile.am
文件中提供普通的 make
规则,这些规则将被带入最终生成的 Makefile
。这是 Automake 的主要扩展点。
因此,您可以将其添加到您的 Makefile 中:
test.capnp.c++ : test.capnp
capnp compile -oc++ $<
# or
# $(CAPNP) compile -oc++ $<
# where $(CAPNP) is the capnp binary as discovered by configure
您还想将 test.capnp
指定为要分发的附加文件:
EXTRA_DIST = test.capnp
您还应该考虑是否要将 .c++ 文件包含在分发包中,以减轻对 capnp
的构建时依赖性。如果不是,则不要将其列在 libmytest_la_SOURCES
中,而应将其列在 nodist_libmytest_la_SOURCES
中,另外还要列在 CLEANFILES
:
中
#
# test.capnp.c++ is a built file that we choose not to distribute
#
nodist_libmytest_la_SOURCES = test.capnp.c++
CLEANFILES = test.capnp.c++
# or: CLEANFILES = $(nodist_libmytest_la_SOURCES)
我正在构建一个如下所示的库(使用 Autotools)。当我将 *.cpp 文件添加到 libmytest_la_SOURCES
.
lib_LTLIBRARIES = libmytest.la
libmytest_la_SOURCES = test.capnp.c++
libmytest_la_CXXFLAGS = -I/usr/include -I$(top_srcdir)/src/includes
libmytest_la_LDFLAGS = -version-info 0:0:0 -L/usr/lib64
libmytest_la_LIBADD = -lcapnp
问题是在进行正常的编译过程之前,我需要调用第三方编译器来生成代码。以下 capnp
工具将生成一个名为 test.capnp.c++
.
capnp compile -oc++ test.capnp
如果我将那个 (test.capnp.c++
) 的输出插入到上面的 makefile 中,我的库就建立好了。我不明白的是如何将该命令调用到 Makefile.am 中以生成所需的源文件并将其插入到 libmytest_la_SOURCES
变量中。
有什么想法吗?
Automake 不直接支持 capnp
,添加对新语言或工具的支持需要破解程序。但是你 可以 在你的 Makefile.am
文件中提供普通的 make
规则,这些规则将被带入最终生成的 Makefile
。这是 Automake 的主要扩展点。
因此,您可以将其添加到您的 Makefile 中:
test.capnp.c++ : test.capnp
capnp compile -oc++ $<
# or
# $(CAPNP) compile -oc++ $<
# where $(CAPNP) is the capnp binary as discovered by configure
您还想将 test.capnp
指定为要分发的附加文件:
EXTRA_DIST = test.capnp
您还应该考虑是否要将 .c++ 文件包含在分发包中,以减轻对 capnp
的构建时依赖性。如果不是,则不要将其列在 libmytest_la_SOURCES
中,而应将其列在 nodist_libmytest_la_SOURCES
中,另外还要列在 CLEANFILES
:
#
# test.capnp.c++ is a built file that we choose not to distribute
#
nodist_libmytest_la_SOURCES = test.capnp.c++
CLEANFILES = test.capnp.c++
# or: CLEANFILES = $(nodist_libmytest_la_SOURCES)