2013-08-22 24 views
6

msvcとgccの両方で動作するプロジェクトファイルを作りたいと思います。qmake:gccとmsvcの両方の処理オプション

たとえば、速度を最適化するには、cl /O2g++ -O3を実行します。

しかし、私は違いを作るためにプロジェクトファイルをどのように伝えるべきか分かりません。私は何かが好きです:

msvc:QMAKE_CXXFLAGS_RELEASE += /O2 /openmp /arch:AVX 
else:QMAKE_CXXFLAGS_RELEASE += -O3 -march=native -fopenmp -D_GLIBCXX_PARALLEL 

悲しいことにはうまくいきません。

他の方法は、mkspecsを変更して、私のアプリで新しいものをバンドルすることですが、移植性はあまりありません。 ありがとう!

+0

問題は何ですか? 「それは悲しいことではない」と言ってどういう意味ですか? – Bill

+0

文書で説明したように、 'win32'や'!win32'のようなスコープを使ってみましたか? http://qt-project.org/doc/qt-4.8/qmake-advanced-usage.html –

+0

前にプロジェクトファイルに入れたコードを追加しても、私はまだ持っています: 'cl -O3 -march = native -fopenmp -D_GLIBCXX_PARALLEL'私は 'cl/O2/openmp/arch:AVX'を望みます。 –

答えて

8

ジャンのために働く、あなたはあなたの説明に基づいて、これを使用する必要があります。

msvc:QMAKE_CXXFLAGS_RELEASE += /O2 /openmp /arch:AVX 
gcc:QMAKE_CXXFLAGS_RELEASE += -O3 -march=native -fopenmp -D_GLIBCXX_PARALLEL 
+1

右!どこかで定義されたコンパイラのリストはありますか?いつかのように私は鳴き声を使用したいですか? –

+0

@ Jean-MichaëlCelerier:はい、そうです:少なくとも今のところ、Clangはgccと互換性のあるオプションを用意しようとしています。あなたがエキゾチックなオプションを使用しない限り、問題は...;) – mozzbozz

+0

@ Jean-MichaëlCelerier:あなたの最初の質問によると、qmakeのコンパイラスコープリストを探していましたが(これも必要でしたが)、何も見つかりませんでした。 - と - エラー私はMinGWが単に "mingw"であることを発見しました( "gcc"と "msvc" - >推測しやすい)。だからclangのために私はそれが "clang"だと非常に確信している;)編集:これは助けるかもしれない:http://stackoverflow.com/questions/14523148/compiler-scope-values-in-qmake – mozzbozz

0

ここに私が使っているプロジェクトファイルがあります。それは正確には、Windowsの(MSVC)およびLinux(GCC)

QT = core gui widgets 

HEADERS += \ 
    render.h 

SOURCES += \ 
    main.cpp \ 
    render.cpp 

QMAKE_CXXFLAGS_RELEASE -= -O 
QMAKE_CXXFLAGS_RELEASE -= -O1 
QMAKE_CXXFLAGS_RELEASE -= -O2 

win32 { # For Windows 
    QMAKE_CXXFLAGS += -openmp 
    QMAKE_CXXFLAGS += -arch:AVX 
    QMAKE_CXXFLAGS += -D "_CRT_SECURE_NO_WARNINGS" 
    QMAKE_CXXFLAGS_RELEASE *= -O2 
} 

linux { # For Linux 
    QMAKE_CXXFLAGS += -fopenmp 
    QMAKE_LFLAGS += -fopenmp 
    QMAKE_CXXFLAGS += -mavx 
    QMAKE_CXXFLAGS_RELEASE *= -O3 
} 
+0

ええ、これは元の投稿よりもどうやって優れていますか?また、QT変数にcoreとguiは必要ありません。それらはデフォルトで含まれています! – lpapp

+0

1つは、彼のポストは動作していないとOPは言った。私は問題はなかったと思う。しかし私はあなたの事例を試しました。それは私にとってはうまくいかない。私はGCC 'QMAKE_LFLAGS + = -fopenmp'に追加する必要があります。そうしないと、リンカエラー(' error:undefined reference omp_get_num_threads'など)が発生します。 –

+0

この回答の問題は、たとえばMinGWとMSVCを区別するために使用できないということです。 – mozzbozz

関連する問題