2011-12-13 4 views
2

私はCMakeでサポートされているすべてのプラットフォームでコンパイルできる簡単なプロジェクトを設定しようとしています。 Win7システムでプロジェクトを開始し、SDL.hとGL/glew.hを含む小さなmain.cppを書きました。私はfind_package(SDL)とfind_package(GLEW)を呼び出して、私のCMakeLists.txtでVS10は常にSUBSYSTEM:WINDOWSにリンクします。 CMake + SDL + GLEW

int main(int, char**) {} 

:メイン機能のスタイルは、単純なC++です。 CMakeの部分はうまく機能したので、私はちょうどVS10-ソリューションファイルを開くと、私はLNK2019を取得するときにコンパイルしてみました:

エラーLNK2019:機能の中で参照未解決の外部シンボルメイン_ _tmainCRTStartup

これは間違ったサブシステムを選択したことを意味しますか?しかし、単にサブシステムをCONSOLEからWINDOWSに切り替えるだけで問題が解決しない場合は、 CMakeはそれに対して隠されたオプションを設定しましたか?私は単純なプログラムをvs10でどのようにコンパイルできますか?

+0

add_executableを使用する場所のCMakeListsの部分を表示できますか?それはあなたが(おそらく)使うことができる "WIN32"オプションを持っています。 –

+0

$ {SOURCES}にはmain.cppが含まれ、$ {HEADERS}にはmain.hが含まれています。 'add_executable( NameOfMyExecutable $ {SOURCES} $ {ヘッダー} ) – marsuek

答えて

6

私は今夜この問題を抱えていました。私はCMakeを使用して、GLFWアプリケーションを構築するためのMSVCプロジェクトを作成しています。もちろん、MSVCを単独で使用している場合は、コンソールウィンドウを削除するための古くからのトリックは、プロパティに入り、「サブシステム」を「Windows」と「エントリポイント」に設定してmainCRTStartupに設定します。 /SUBSYSTEM:WINDOWS /ENTRY:"mainCRTStartup"フラグをlink.exeに追加してください。ただし、CMakeは簡単な方法ではありません。

ストレートでadd_executable()コマンドを実行すると、/SUBSYSTEM:CONSOLE /ENTRY:"mainCRTStartup"がリンカーに渡されます。

add_executable(exename WIN32 ...)をお寄せいただければ、/SUBSYSTEM:WINDOWSと表示されます。

Gaah!いずれのオプションでも、私たちはそこに途中降機を作ります!

は、私が(FWIW、私はCMakeの2.8.10およびVisual Studio 2012 Expressを使用しています)、およびでCMakeの船が /SUBSYSTEM/ENTRYフラグを制御するように思われる変数が CMAKE_CREATE_WIN32_EXEと呼ばれていることを発見したこと.cmakeファイルを介しつつい。したがって、両方の部分を設定するには、その変数を変更するだけです。私が最後にしたのは、このトリックでした:

if(MSVC) 
    set(CMAKE_CREATE_WIN32_EXE "/SUBSYSTEM:WINDOWS /ENTRY:\"mainCRTStartup\"") 
endif(MSVC) 

希望は他の誰かに役立ちます。

関連する問題