2017-03-18 5 views
0

LinuxでG ++を使用するC++コンパイルとClangを使用するOSXでCMakeLists.txtファイルを作成しようとしています。CMakeターゲットリンクライブラリG ++フラグがOSX Clangと競合する

私はG ++でのターゲットライブラリフラグ-Wl,--start-group-Wl,--end-groupを使用したいのですが、クランとリンクする際にこれらのエラーを与える:私は見つけることができますld: unknown option: --start-group

結果だけがまるでMacのコピーにこれらのフラグを削除することを選択したが、これはLinuxからOSXへのプロジェクトの移行を容易にしません。私はこれらのステートメントCMAKE条件を作ってみましたが、それらが発見されないリテラルのライブラリとして扱われます。

例:$<IF($<NOT:APPLE>)> -Wl,--start-group $<ENDIF($<NOT:APPLE>)>

は生成:c++: error: $<IF: No such file or directory

はCMAKE TARGET_LINK_LIBRARIESで条件付きで編集する方法はありますフィールド?

答えて

0

私はこれ試してみた:

if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") 
    set(START_GROUP "-Wl,--start-group") 
    set(END_GROUP "-Wl,--end-group") 
else() 
    set(START_GROUP "") 
    set(END_GROUP "") 
endif() 

をそれからちょうど$ {START_GROUP}と$ {} END_GROUPでそれらのオプションを交換し、彼らは唯一のGNUコンパイラで使用されます。

実際に重要なコンパイラであれば、プラットフォームに基づいて切り替えを行わないでください。そうしないと、Linux上のClangユーザーはプロジェクトをビルドできなくなります。

関連する問題