14

理論的には、cmake を使用してリソース ファイルを使用して Win32 アプリを作成するのは非常に簡単です。コマンドでは、add_executableリソース ファイルを C または C++ ソース ファイルと同じくらい簡単にリストできます。ただし、MinGW ツールを使用してビルドする場合、既知のバグがあります。

CMakeFiles.txt に以下を含めるという回避策を見つけました...

if(MINGW)
  set(CMAKE_RC_COMPILER_INIT windres)
  ENABLE_LANGUAGE(RC)
  SET(CMAKE_RC_COMPILE_OBJECT
      "<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>")
endif(MINGW)

残念ながら、これはうまくいかないようです。何が起こるかは、理解できないファイルをwindres生成することです。<whatever>.rc.resld

私の検索では、特に Visual Studio 以外では、Win32 のサポートが非常に優先度が低いと見なされているという強い疑いが生じました。Win32 は明らかに以前ほど重要ではないため、これは理解できます。もちろん、Visual Studio Express Edition は無料で簡単に入手できます。

それでも、私がまだ使っているいくつかの古い Win32 アプリに MinGW GCC を使用できれば、私にとって便利です。他に何もなければ、GCOV テスト カバレッジ統計を取得できます。

明らかに、他のすべてが失敗した場合でも、カスタム ビルド コマンドを使用していつでもリソース ファイルを処理できます。1 つの問題は、windres と ld のどちらにも詳しくないこと、または MinGW が Win32 リソース ファイルを処理する方法に慣れていないことです。もう1つは、誰かが私と共有したい優れたホイールをすでに持っている場合、ホイールを再発明したくないということです.

基本的にはこれで終わりです - cmake を使用し、MinGW を使用して (ただし、Visual Studio のサポートを壊さずに)、リソース ファイルを使用して Win32 アプリのビルドをサポートするにはどうすればよいですか?

4

1 に答える 1

7

あなたの問題はここにあると思います:

<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>

たぶん、あなたは次のように書くべきです:

<CMAKE_RC_COMPILER> <SOURCE> <OBJECT>

またはより正式な:

<CMAKE_RC_COMPILER> -i <SOURCE> -o <OBJECT>

もう 1 つの考えられる問題は、cmake が代用する拡張子はどれですか? windress はそこから必要な出力ファイル形式を推測します。

参考文献はこちら: www.mingw.org/wiki/MS_resource_compiler

ご存知のように、「res」ファイルは ld には不適切であり、windres の例は sourceware.org/binutils/docs/binutils/windres.html

ウィンドレスマン

質問の作成者による編集...

修正された cmake コード スニペットは次のとおりです...

if(MINGW)
  set(CMAKE_RC_COMPILER_INIT windres)
  ENABLE_LANGUAGE(RC)
  SET(CMAKE_RC_COMPILE_OBJECT
    "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
endif(MINGW)

-Oコマンドテンプレートにオプションを挿入するのではなく、おそらくフラグ変数を設定する必要がありますが、これは機能します。

于 2010-08-22T23:08:48.587 に答える