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

如何通过AC_CONFIG_SUBDIRS将Project B的AC_DEFINE宏导出至Project A?

解决方案

AC_CONFIG_SUBDIRS仅负责递归配置子项目,子项目中用AC_DEFINE定义的宏默认不会自动传递给主项目,需通过以下方式手动实现宏的共享:

方法一:直接引用子项目配置头文件

  1. 修改Project B的configure.ac,添加生成配置头文件的指令,让宏定义写入该文件:
    AC_DEFINE([NEWDEFINE])
    AC_CONFIG_HEADERS([projectb_config.h]) # 新增:生成包含宏定义的头文件
    
  2. 重新生成Project B的配置文件:
    cd projectb && autoreconf -i && cd ..
    
  3. 在Project A的a.c中,引入子项目的配置头文件:
    #include "projectb/projectb_config.h"
    #ifndef NEWDEFINE
    #error NEWDEFINE not defined
    #endif
    
  4. 在Project A的编译配置中添加子项目头文件路径:
    • 若用Automake,修改Makefile.am:
      AM_CPPFLAGS = -Iprojectb
      
    • 或直接在configure.ac中设置:
      CPPFLAGS="$CPPFLAGS -Iprojectb"
      

方法二:提取子项目宏定义到主项目

  1. 按方法一第一步修改Project B的configure.ac,确保宏定义写入配置头文件。
  2. 在Project A的configure.ac中,递归配置子项目后读取其配置头文件,提取宏定义并添加到主项目:
    AC_CONFIG_SUBDIRS([projectb])
    # 读取子项目配置头文件,提取NEWDEFINE
    if test -f projectb/projectb_config.h; then
        if grep -q '^#define NEWDEFINE' projectb/projectb_config.h; then
            AC_DEFINE([NEWDEFINE], [], [Imported from Project B])
        fi
    fi
    # 确保主项目生成自身配置头文件
    AC_CONFIG_HEADERS([config.h])
    
  3. 在Project A的a.c中引入主项目配置头文件:
    #include "config.h"
    #ifndef NEWDEFINE
    #error NEWDEFINE not defined
    #endif
    

验证构建

执行以下命令重新构建项目:

autoreconf -i
./configure
make

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:33:34