簡體   English   中英

從 configure.ac 設置的 CPPFLAGS 在 Makefile.am 中被忽略

[英]CPPFLAGS set from configure.ac are ignored in Makefile.am

我正在嘗試使用自制的 AutoTools 文件( configure腳本)構建 TerraGear。 TerraGear 分為幾個子項目。 對於每個文件,我創建了一組不同的configure.acMakefile.am文件,但它們幾乎都相同。

考慮以下兩個文件:

configure.ac

AC_PREREQ([2.69])
AC_INIT([TerraGear libterragear], [2.1.0], [])
AC_CONFIG_SRCDIR([airport.cxx])
AC_CONFIG_FILES([Makefile])
AM_INIT_AUTOMAKE([foreign])

AC_PROG_CXX

PKG_CHECK_MODULES([ZLIB], [zlib])
PKG_CHECK_MODULES([GDAL], [gdal])

AC_ARG_WITH([simgear-dir], [AS_HELP_STRING(
    [--with-simgear-dir=prefix],
    [installation prefix of SimGear])],
    [
        SIMGEAR_CPPFLAGS="-I${withval}/include"
        SIMGEAR_LIBRARY="-L${withval}/lib"
    ]
)
AC_MSG_NOTICE([simgear cppflags : ${SIMGEAR_CPPFLAGS}])

AC_OUTPUT

Makefile.am

bin_PROGRAMS = genapts850

genapts850_SOURCES = airport.cxx \
    apt_math.cxx \
    closedpoly.cxx \
    debug.cxx \
    elevations.cxx \
    helipad.cxx \
    lights.cxx \
    linearfeature.cxx \
    linked_objects.cxx \
    main.cxx \
    object.cxx \
    output.cxx \
    parser.cxx \
    runway.cxx \
    rwy_simple.cxx \
    rwy_gen.cxx \
    scheduler.cxx \
    taxiway.cxx

genapts850_LDADD = -L$(top_srcdir)/../../Lib/terragear \
    $(SIMGEAR_LIBRARY) \
    -lSimGearCore \
    -lSimGearScene \
    -lterragear \
    $(ZLIB_LIBRARY) \
    $(GDAL_LIBRARY)

genapts850_CXXFLAGS = -I$(top_srcdir)/../../Lib \
    -I$(top_srcdir)/../../Lib/terragear \
    $(SIMGEAR_CPPFLAGS) \
    $(ZLIB_CFLAGS) \
    $(GDAL_CFLAGS)/gdal

我運行 autoreconf:

autoreconf -vfi
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force 
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf --force
autoreconf: configure.ac: not using Autoheader
autoreconf: running: automake --add-missing --copy --force-missing
autoreconf: Leaving directory `.'

然后運行配置腳本:

./configure --with-simgear-dir=/path/to/simgear/installation/prefix
[...]
configure: simgear cppflags : -I/path/to/simgear/installation/prefix/include
[...]

然后我運行 make:

make
g++ -DPACKAGE_NAME=\"TerraGear\ libterragear\" -DPACKAGE_TARNAME=\"terragear-libterragear\" -DPACKAGE_VERSION=\"2.1.0\" -DPACKAGE_STRING=\"TerraGear\ libterragear\ 2.1.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"terragear-libterragear\" -DVERSION=\"2.1.0\" -I.    -I./../../Lib -I./../../Lib/terragear   -Ig++ -DPACKAGE_NAME=\"TerraGear\ libterragear\" -DPACKAGE_TARNAME=\"terragear-libterragear\" -DPACKAGE_VERSION=\"2.1.0\" -DPACKAGE_STRING=\"TerraGear\ libterragear\ 2.1.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"terragear-libterragear\" -DVERSION=\"2.1.0\" -I.    -I./../../Lib -I./../../Lib/terragear   -I/path/to/simgear/installation/prefix/include/gdal -g -O2 -MT genapts850-airport.o -MD -MP -MF .deps/genapts850-airport.Tpo -c -o genapts850-airport.o `test -f 'airport.cxx' || echo './'`airport.cxx
airport.cxx:6:10: fatal error: simgear/compiler.h: Datei oder Verzeichnis nicht gefunden
    6 | #include <simgear/compiler.h>
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:471: genapts850-airport.o] Fehler 1

simgear/compiler.h駐留在/path/to/simgear/installation/prefix/include )我做錯了什么? 我現在把頭撞在屏幕上三個小時,但無法弄清楚問題所在。 請幫忙 …

並非所有在configure中定義的 shell 變量都被轉發到輸出文件。 一般來說,你需要使用AC_SUBST()來告訴 Autoconf 一個 shell 變量應該是一個輸出變量:

AC_SUBST([SIMGEAR_CPPFLAGS])
AC_SUBST([SIMGEAR_LIBRARY])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM