4

Automakeにいくつかのコンパイルオプションを追加しようとしていますが、どのアプローチも機能しません。

これが私のconfigure.ac

AC_INIT(...)
AC_PREREQ([2.59])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([1.10 foreign -Wall no-define])
AC_PROG_CXX
AC_PROG_LIBTOOL
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile test/Makefile])
AC_LANG(C++)
AC_OUTPUT

そして、私には親がいますMakefile.am(トップレベルのディレクトリに):

#AM_CFLAGS = ... # doesn't work
AUTOMAKE_OPTIONS = subdir-objects
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
SUBDIRS = src test
dist_noinst_SCRIPTS = autogen.sh

およびMakefile.am各ソースディレクトリ用。src/Makefile

include_HEADERS = ...
lib_LIBRARIES = ...

およびtest/Makefile

#AM_CFLAGS = ... # doesn't work
bin_PROGRAMS = myprog #test
myprog_SOURCES = ...
myprog_LDADD = ../src/libmylib.a
#myprog_CFLAGS = ... # Doesn't work either

コメント行のすべての組み合わせのコメントを外してみました。

  • AM_CFLAGS = ...親に追加Makefile.am-これにより、影響を受けるすべてのソースのCFLAGSが設定されます
  • AM_CFLAGS = ...他の2つMakefile.amに追加
  • myprog_CFLAGS = ...をMakefile.amに追加します(これにより、myprogのコンパイル時にCFLAGSが設定されます)

しかし、これらのどれも効果がありません。私のプログラム(myprog)とそのライブラリ(mylib)はどちらも、のようなデフォルトのフラグでコンパイル/リンクされ続けています-DHAVE_CONFIG -g -O2

INCLUDESの代わりに使ってみましたがAM_CFLAGS、役に立ちませんでした。

誰かがここで何が起こっているのか、そしてそれを修正する方法を知っていますか?

4

2 に答える 2

6
  1. C ++をコンパイルしているように見えます。この場合、使用する変数はですAM_CXXFLAGS
  2. 設定AM_CXXFLAGSは、Makefile.am実際にコンパイルしているもの(つまり、、、 ...)を宣言するbin_PROGRAMSlib_LTLIBRARIESある必要があります。
  3. include繰り返している場合は、automakeがステートメントをサポートしていることを忘れないでください。
  4. 再帰的に有害と見なされます。最新のautomakeはをサポートしていますsubdir-objectsMakefile.am手に負えなくなった場合は、includeステートメントを使用してください。
  5. libtoolをオンにする最新の方法はLT_INIT、ではありませんAC_PROG_LIBTOOL
  6. AC_LANG(C++)の時点では何もしませんconfigure.ac。構成テストを実行するときに使用する言語を設定します。その上、AC_LANG_PUSHそしてそれAC_LANG_POPを行うためのより賢い方法です。
  7. なぜあなたはACLOCAL_AMFLAGSそのように割り当てるのですか?
于 2013-03-17T04:09:20.630 に答える
-1

提案されているように親のMakefile.amに追加しようとしAM_CFLAGSましたが、機能しませんでした。関連するMakefile.amに追加すると、-g次のように2つの競合するオプションの導入が終了しました。

libtool: link: gcc -std=gnu99 -g -O0 -g -O2 -Wl -pthread ...

最適化を無効にする正しい方法は、CFLAGS = -g -O0必要な場所にMakefile.amを追加することです。何らかの理由で変更が有効にならない場合は、Makefile.inとMakefile(拡張子なし)を削除してみてください。

正しいリンカディレクティブは次のとおりです。

libtool: link: gcc -std=gnu99 -g -O0 -Wl -pthread ...
于 2014-02-11T20:12:35.377 に答える