2017-11-04 13 views
1

-pthreadの可用性をテストし、フラグをCXXFLAGSLDFLAGSの両方に設定しようとしています。 ax_pthreadは間違ったコンパイラを使用し、C++プロジェクトに間違ったフラグを設定するため、ax_pthreadは使用しません。 Significance of -pthread flag when compilingによれば、-pthreadが最も移植性が高いので、CXXFLAGSLDFLAGSの両方に使用したいと考えています。[action-if-true]で複数のアクションを実行する方法

我々はconfigure.acに追加したスクリプトは次のとおりです。

./configure: line 16173: syntax error near unexpected token `&&' 
./configure: line 16173: ` && AM_LDFLAGS="-pthread"' 

autoreconf --warnings=allがテストに関連した警告を生成しない:それは、その結果

AC_ARG_ENABLE(tls, 
    AS_HELP_STRING([--enable-tls], [enable thread storage (default is yes)]), 
    ac_enable_tls=$enableval, 
    ac_enable_tls=yes) 
AM_CONDITIONAL(HAS_PTHREADS, test $ac_enable_tls = yes) 

if test "$ac_enable_tls" = "yes"; then 
    SAVED_CXXFLAGS="$CXXFLAGS" 
    CXXFLAGS="-pthread" 
    AC_MSG_CHECKING([for pthread support]) 
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], 
     [AC_MSG_RESULT([-pthread]) && AC_SUBST([AM_CXXFLAGS], ["-pthread"]) && AC_SUBST([AM_LDFLAGS], ["-pthread"])], 
     [AC_MSG_FAILURE(["--enable-tls=yes but pthreads are not available"])] 
    ) 
    CXXFLAGS="$SAVED_CXXFLAGS" 
fi 

AC_COMPILE_IFELSE[action-if-true]で3つのことをしようとしていると思います。 Autoconf AC_COMPILE_IFELSE文書は状況をどのように処理するか教えてくれませんし、例を提供していません。私たちは、[action-if-true]に3つのアクションを実行したい

  • は、私が[action-if-true]で複数のアクションを実行するにはどうすればよいのメッセージpthread
  • AM_CXXFLAGS += -pthread
  • AM_LDFLAGS += -pthread

を印刷しますか?

答えて

1

シェルオペレータ&&を使用する理由はわかりません。直前のm4マクロが改行を発行しても動作しません。 ;を使用するか、複数の行を使用することを検討する必要があります。

設定スクリプトでは、AC_COMPILE_IFELSEアクションでシェル変数を設定し、その後でそれを確認するだけでよくあります。これにより、深くネストされたシェルコードや、m4引用/マクロ展開に関連する問題を避けることができます。以下はglibcの例です:

AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>      
void foo (int i, void *p) 
{ 
    asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) "" 
     :: STAP_PROBE_ASM_OPERANDS (2, i, p)); 
}]])], [libc_cv_sdt=yes], [libc_cv_sdt=no]) 
+0

ありがとうフロリアン。 * "&&シェル演算子を使う理由はわかりません" * - これは標準的なシェルのものです - ['&&'と '||'](https://unix.stackexchange.com/q/24684/56041)。私は[Autoconfのドキュメント](https://www.gnu.org/software/autoconf/manual/autoconf-2.66/html_node/Running-the-Compiler.html)が何をすべきか教えてくれないので、私はそれを使用しています。それは間違っている私を驚かさない:) – jww

+0

* "それは非常にシェル変数を設定するだけの設定スクリプトでも一般的です..." * - あなたはこれの例がありますか?私もそれについて考えましたが、エクスポートされていないローカル変数を設定する方法がわかりませんでした。試したことが 'set foo = 1'のように設定に失敗しました。 – jww

関連する問題