You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Makefile.am中添加自定义编译命令生成capnp代码后编译库

解决方案

你可以通过Automake的内置特殊变量BUILT_SOURCES绑定自定义代码生成规则,实现预期的预编译流程,修改后的完整Makefile.am配置如下:

lib_LTLIBRARIES = libmytest.la

# 声明预生成源文件,Automake会在常规编译前优先构建该类文件
BUILT_SOURCES = test.capnp.c++

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源文件,改动后自动重新生成
test.capnp.c++: test.capnp
	capnp compile -oc++ $<

# 声明清理范围,make clean时自动删除生成的代码文件
CLEANFILES = test.capnp.c++ test.capnp.h

配置说明

  • BUILT_SOURCES是Automake预留的特殊变量,所有写入该变量的文件都会被调整到编译队列最前方执行,匹配预生成代码的时序要求
  • 自定义的生成规则明确了代码的依赖关系,只要test.capnp有修改,下次构建时会自动重新执行capnp命令更新输出文件
  • 生成的.h头文件也加入CLEANFILES,避免旧版本残留导致的编译异常

如果需要在configure阶段就检查capnp工具是否存在,可以在configure.ac中加入如下配置:

AC_CHECK_PROG([CAPNP], [capnp], [yes], [no])
if test "x$CAPNP" = "xno"; then
  AC_MSG_ERROR([capnp tool not found, please install capnproto first])
fi

内容的提问来源于stack exchange,提问作者Ender

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:48:03