2017-09-07 21 views
0

によると、私はCMakeの既存のC++プロジェクトを移行していますビルドからファイルを除外します。 このプロジェクトでは、一部のソースファイルは、Visual Studioの一般設定プロパティExcluded from Buildとマークされています(リリースモード)。CMakeのは、コンフィギュレーション

私はCMakeLists.txtでこの動作を再現する方法を見つけようとしています。私はまだ私の除外-ME-の内容をラップすることができ

Target "Tardis" has source files which vary by configuration. This is not supported by the "Visual Studio 14 2015 Win64" generator. 

:これまでのところ私は、ジェネレータ式でtarget_sources()を使用して試してみた:

set(_srcs Doctor.cpp Clara.cpp) 
set(_headers Doctor.hpp Clara.hpp) 

add_library(Tardis SHARED ${_srcs} ${_headers}) 

target_sources(Tardis PRIVATE $<$<CONFIG:Debug>:Dalek.cpp>) 

しかし、私はステップの生成において、CMakeのエラーで終了しますin-release-mode大きなファイル#ifdef _DEBUGがありますが、元のプロジェクトからソースファイルを変更しないような解決策を実際に探しています。

私はCMake 3.8を使用しており、必要最小限は3.7です。

楽しい一日を!

+1

リリースモードであれば、単ににファイルを追加します'_srcs'? –

+1

MSVCではうまくいきません。これは複数の構成IDEです。 Makefiles Generatorsとは異なり、DebugまたはReleaseが生成ステップで設定されていますが、MSVCではこれがビルドステップです。その時点では、 '_srcs'は既に定義されており、変更することはできません。したがって、ビルドステップでソースファイルを変更するには、ジェネレータの式を使用します。 –

+1

Visual Studioでこのソリューションをテストすることさえできませんでした。) 'CMAKE_BUILD_TYPE'は何も展開しません。 –

答えて

2

あなたは条件付きで含ま源のために別々の静的ライブラリを作成することができます。ライブラリーは、その後、たとえば、target_link_librariesコマンドで設定に依存してリンクすることができます。

add_library(TardisDebugOnlyHelper STATIC ${_debug_only_srcs} ${_debug_only_headers}) 
add_library(Tardis SHARED ${_srcs} ${_headers}) 
target_link_libraries(Tardis debug TardisDebugOnlyHelper) 

(免責事項:私はまだそれをテストしていない)

+0

はい私もこのことについて考えていました。それは以前のプロジェクトアーキテクチャを少し変えて完璧ではありませんが、これまでのところ一番良いソリューションだと思います。 –

+0

はい、このソリューションは技術的に機能します;) –

関連する問題