5

同じソースファイルからビルドする2つのプロジェクトが必要です。2つ目のプロジェクトには小さなサブセットがあり、いくつかの異なる定義とビルドフラグがあります。

私がこのようなことを試みるとき:

SET (this_target PROJECT1)
PROJECT(${this_target})

...

ADD_EXECUTABLE(#{this_target} ...)

SET (this_target PROJECT2)
PROJECT(${this_target})

...

add_definitions (-DMYDEFINE)
TARGET_LINK_LIBRARIES( ${this_target} -myflag )

ADD_EXECUTABLE(#{this_target} ...)

最終的には、適切なソースファイルなどを使用して2つのプロジェクトを作成しますが、何らかの理由で、少なくともVisual Studio 2010では、両方のプロジェクトでMYDEFINEが定義され、リンカーフラグにmyflagが含まれているようです。

なぜそれがファイルに対して機能するように見えるのかはわかりませんが、フラグに対しては機能しません。

4

2 に答える 2

5

まず、実行可能ファイルには異なる名前を使用する必要があります。ターゲットに特定の定義を追加する場合は、set_target_properties を使用して、各ターゲットに独自のプロパティ (コンパイル定義など) を持たせることができます。

# compile and link first app
add_executable(prg1 ${CommonSources} ${Prg1SpecificSources})
target_link_libraries(prg1 lib1 lib2 lib3)

#set target-specific options
set_target_properties(prg1 PROPERTIES COMPILE_DEFINITIONS "FOO=BAR1")

#...

# compile and link second app
add_executable(prg2 ${CommonSources} ${Prg2SpecificSources})
target_link_libraries(prg2 lib1 lib2 lib3)
#set target-specific options
set_target_properties(prg1 PROPERTIES COMPILE_DEFINITIONS "FOO=BAR2")

リンク フラグをオーバーライドする場合は、set_target_properties を LINK_FLAGS とともに使用できます

于 2012-09-01T04:33:10.310 に答える
1

1つのCMakeLists.txtに複数のターゲットを配置すると、generate.stampへのアクセスが衝突するため、Visual Studio 2010で断続的なビルドエラーが発生することがわかりました(ただし、何か間違ったことをしていることを除外することはできません)。したがって、ターゲットを別のCMakeLists.txtファイルに配置するか、他の回避策を見つける必要がある場合があります。

于 2012-11-05T22:33:48.383 に答える