4

最近、リリースCRTに対してのみコンパイルしたライブラリに依存するモジュールをCMakeプロジェクトに追加しました。CMakeLists.txtでは次のようになります。

IF(WIN32)
    ADD_LIBRARY(mymodule MODULE ${MY_LIBRARY_FILES})
    TARGET_LINK_LIBRARIES(mymodule libVendor)
    INSTALL(TARGETS mymodule LIBRARY)
ENDIF(WIN32)

このモジュールをデバッグ設定を使用してMSVCでコンパイルしようとすると、コンパイルが失敗します。だから私がしたいのは、それをコンパイルしてデバッグ構成にインストールすることから除外することです。リリース構成では、通常どおりに使用されます。CMakeでこれを行うことは可能ですか?

4

2 に答える 2

8

また、特定の構成でデフォルトのビルドからターゲットを除外することもできます。

SET_TARGET_PROPERTIES(mymodule PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_DEBUG True)
于 2013-08-29T14:39:22.633 に答える
4

構成から除外されたターゲットを持つことはできませんが、ソースコードの条件付きコンパイルのために、ライブラリが空(またはほぼ空)になる可能性があります。また、target_link_librariesへの「optimized」および「debug」キーワードを使用して、構成固有の方法で別のライブラリにリンクできます。

たとえば、ライブラリのソースファイルでは、次のことができます。

#ifdef _DEBUG
// ... Debug code, possibly just a dummy function if necessary, goes here
#else
// ... Release code, the real deal, goes here
#endif

次に、次のように、target_link_librariesに「optimized」キーワードを使用して、リリースビルドでlibVendorにのみリンクするように指定できます。

if(WIN32)
  add_library(mymodule ...)
  target_link_libraries(mymodule optimized libVendor)
  install(TARGETS mymodule LIBRARY)
endif()

target_link_librariesのドキュメントでは、これらのキーワードの使用について説明し、構成ごとの効果を実現するためにIMPORTEDターゲットを定義できることにも言及しています。ただし、IMPORTEDターゲットを定義するには、ライブラリファイルが既にビルドされている必要があり、それらをポイントする必要があります。だから...条件付きコンパイルはおそらくあなたがやりたいことをする最も簡単な方法です。

于 2013-03-07T05:00:03.503 に答える