26

私は単純な Autotools C プロジェクト (C++ ではない) を持っています。

CFLAG (検査による) のようです-g -O2

などを使用しているため、生成されたすべてのメイク ファイルを-std=gnu99CFLAG にも追加したいと考えていますfor (int i = 0; i < MAX; i++)

もちろん Makefile をハックすることもできますが、これは上書きされてしまいます./configure

コードで必要な CFLAG を追加 (または変更) する正しい場所はどこですか? (ユーザーが変更したい CFLAG とは対照的に)

(これは、必要のない Eclipse 固有の回答を得ていたため、(Eclipse CDT) autotools プロジェクトに -std=gnu99 などの CFLAG を追加する場所の部分的な複製であることに注意してください。)


@DevSolar の回答はまだ役に立ちません。configure.acファイル (以下) がconfigureスクリプト (同じく以下) を生成します。

configure.ac:

dnl Process this file with autoconf to produce a configure script.

CFLAGS="$CFLAGS -std=gnu99"
AC_PREREQ(2.59)
AC_INIT(tuntest, 1.0)


AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE()

AC_PROG_CC

AC_CONFIG_FILES(Makefile src/Makefile)
AC_OUTPUT

$ grep CFLAGS 構成

CFLAGS
CFLAGS
To assign environment variables (e.g., CC, CFLAGS...), specify them as
  CFLAGS      C compiler flags
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
   CFLAGS="-g"
  CFLAGS=""
     CFLAGS="-g"
if test "$ac_test_CFLAGS" = set; then
  CFLAGS=$ac_save_CFLAGS
    CFLAGS="-g -O2"
    CFLAGS="-g"
    CFLAGS="-O2"
    CFLAGS=
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
4

3 に答える 3

25

autoconf には、このためのマクロがあります。

ただ置く:

AC_PROG_CC_STDC

あなたの後、AC_PROG_CCすべてが正しくなります。

特に、C99 モードを持っていないが-std=gnu99、デフォルトで動作する他のコンパイラを使用する場合 (または、hpcc の別のオプション-AC99が思い浮かびます)。

私はそのようなものには使用しませんCFLAGS

ドキュメントから:

-- マクロ: AC_PROG_CC_STDC
C コンパイラが ISO 標準 C (現在は C99) をコンパイルできない場合、
出力変数 `CC' にオプションを追加して、それを機能させてみてください。もしも
コンパイラは C99 をサポートしていないため、ANSI のサポートにフォールバックします
C89 (ISO C90)。

このマクロを呼び出した後、C コンパイラが
標準 C を受け入れるように設定されています。そうでない場合は、シェル変数
`ac_cv_prog_cc_stdc' は `no' に設定されています。
于 2012-07-25T13:09:54.000 に答える
4

CFLAGS にコンパイラオプションを追加するよりもマクロ like を使用するAC_PROG_CC_STDC方が望ましいですが、 autoconf には現在、C11 コンパイラ サポートを有効にするマクロがありませAC_PROG_CC_C11ん。AC_PROG_CC_STDC-std=gnu99-std=gnu11-std=c11

置くだけでコンパイラフラグを追加できます

CFLAGS="$CFLAGS -std=c11"

configure.ac で。

または、コンパイラが追加されたオプションをサポートしているかどうかを最初に確認し、それ以外の場合は警告を出力して、コンパイラで機能する同等のオプションを CFLAGS に手動で追加するようにユーザーに指示することをお勧めします。

AX_CHECK_COMPILE_FLAG([-std=c11],
  [AX_APPEND_FLAG([-std=c11])],
  [AC_MSG_WARN([-std=c11 not supported, you may have to set CFLAGS to enable C11 support.])
])

これは、 GNU Autoconf ArchiveAX_CHECK_COMPILE_FLAGにあるおよびAX_APPEND_FLAGマクロを使用します。それらを使用するには、それらをサブディレクトリに配置し、configure.acに追加します。m4AC_CONFIG_MACRO_DIR([m4])

于 2015-03-08T16:35:57.623 に答える