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

Automake中ENABLE_GUI条件失效,--enable-gui开关不生效如何解决?

问题:--enable-gui开关未按预期工作

尝试为程序配置--enable-gui开关,但执行./autogen.sh && ./configure --with-gui=no && make时,系统提示找不到gtk.h,推测Makefile仍将ENABLE_GUI判定为true。相关配置代码如下:

configure.ac 代码:

AC_INIT([cwallet], [1.1], [bug-automake@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AM_PROG_CC_C_O
AC_CONFIG_HEADERS([config.h])

AC_ARG_ENABLE([gui],
  [AS_HELP_STRING([--enable-gui],
  [enable GUI (default is yes)])],
  [enable_gui=$enableval],
  [enable_gui=yes]) 


if test x$enable_gui != xno; then
   PKG_CHECK_MODULES([GTK2],[gtk+-2.0])
fi

< ... some stuff ... >

AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
AC_OUTPUT

AM_CONDITIONAL([ENABLE_GUI],[test x$enable_gui == xyes])

src/Makefile.am 代码:

if ENABLE_GUI
bin_PROGRAMS = cwallet cwallet-gui
cwallet_SOURCES = main.c cwallet.c
cwallet_gui_SOURCES = main-gui.c cwallet.c
cwallet_gui_LDADD = $(GTK2_LIBS)
cwallet_gui_CPPFLAGS = $(GTK2_CFLAGS)
else
bin_PROGRAMS = cwallet
cwallet_SOURCES = main.c cwallet.c
endif

解决方案

问题根源有两处:

  1. 命令参数不匹配:配置中定义的是--enable-gui开关,你却用了--with-gui=no,正确的禁用参数应为--disable-gui或者--enable-gui=no。

  2. 条件判断位置错误:AM_CONDITIONAL必须放在AC_OUTPUT之前执行,否则automake无法将条件规则正确注入到生成的Makefile中,导致条件判断失效。

修改后的configure.ac:

AC_INIT([cwallet], [1.1], [bug-automake@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AM_PROG_CC_C_O
AC_CONFIG_HEADERS([config.h])

AC_ARG_ENABLE([gui],
  [AS_HELP_STRING([--enable-gui],
  [enable GUI (default is yes)])],
  [enable_gui=$enableval],
  [enable_gui=yes]) 

# 将AM_CONDITIONAL移至AC_OUTPUT之前
AM_CONDITIONAL([ENABLE_GUI],[test x$enable_gui == xyes])

if test x$enable_gui != xno; then
   PKG_CHECK_MODULES([GTK2],[gtk+-2.0])
fi

< ... some stuff ... >

AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
AC_OUTPUT

执行正确的构建命令:

./autogen.sh && ./configure --disable-gui && make

或者:

./autogen.sh && ./configure --enable-gui=no && make

可选优化:简化Makefile.am代码

把公共的cwallet配置提到条件判断外,减少重复代码:

bin_PROGRAMS = cwallet
cwallet_SOURCES = main.c cwallet.c

if ENABLE_GUI
bin_PROGRAMS += cwallet-gui
cwallet_gui_SOURCES = main-gui.c cwallet.c
cwallet_gui_LDADD = $(GTK2_LIBS)
cwallet_gui_CPPFLAGS = $(GTK2_CFLAGS)
endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:14:54