すでに スレッド がありましたが、実際には役に立ちませんでした。たとえば、Foo.libforReleaseにリンクできるようにしたいConfig andFoo_d.libforDebugConfig、どうすればこれを達成できますか?私がこれを行う場合:
target_link_libraries(MyEXE debug Foo_d)
target_link_libraries(MyEXE optimized Foo)
次に、デバッグ構成用の両方のライブラリがプロジェクトにありますか?リリースオプションがないのはなぜですか?
どうもありがとう!
解決策は次のとおりです。
SET(LINK_LIBRARY optimized Foo debug Foo_d)
target_link_libraries(MyEXE ${LINK_LIBRARY})
target_link_librariesはリストを取得するため、2回呼び出す必要はありません。以下が機能します。
target_link_libraries(MyEXE debug Foo_d optimized Foo)
また、別の回答のコメントで尋ねられた質問に回答するには、複数のライブラリでの作業は次のように機能します。
target_link_libraries(MyEXE
debug Foo1_d optimized Foo1
debug Foo2_d optimized Foo2)
CMakeプロジェクトの一部としてライブラリもビルドする場合は、デバッグや最適化を指定する必要がないことに注意してください。 CMakeはあなたにぴったりのものを選びます。
ライブラリがプロジェクトの一部である場合、または_find_package
_コマンドの構成モードを使用してライブラリをインポートする場合は問題ありません( ドキュメント および 例 を参照)。サードパーティを変更できないために_<package>Config.cmake
_が生成される場合(cmakeツールを使用しないか、実行したくない場合があります)、答えはそのようなプロセスをエミュレートすることです。
_add_library(foo STATIC IMPORTED)
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/foo-d.lib")
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/foo.lib")
target_link_libraries(MyEXE foo)
_
「デバッグ」/「最適化」機能とは異なり、このようなアプローチはデバッグ/リリース構成に限定されないことに注意してください。
_set_target_properties(foo PROPERTIES IMPORTED_LOCATION_MINSIZEREL "/path/to/foo-small.lib")
_
また、 INTERFACE_INCLUDE_DIRECTORIES :のようないくつかのグッズがあります。
_set_target_properties(foo PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "/path/to/foo/includes")
include_directories("/path/to/foo/includes") # this line not needed
target_link_libraries(MyEXE foo) # this command will add "/path/to/foo/includes" for you
_
および推移的なリンク:
_add_library(boo STATIC IMPORTED)
set_target_properties(boo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/boo-d.lib")
set_target_properties(boo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/boo.lib")
add_library(foo STATIC IMPORTED)
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/foo-d.lib")
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/foo.lib")
set_target_properties(foo PROPERTIES INTERFACE_LINK_LIBRARIES boo) # foo depends on boo
target_link_libraries(MyEXE foo) # boo will be linked automatically
_
もちろん、_find_library
_やfind_package(... MODULE)
などの通常のcmakeコマンドを使用して、場所をハードコーディングする代わりに推定することができます。
デバッグライブラリの_dのように、特定のパターンに従うデバッグ/リリースライブラリがある場合は、次のようにして繰り返すのを避けることができます。
set (MY_LIBS
foo
bar
baz
)
# Generate the list of files to link, per flavor.
set (LINK_LIST "")
foreach(x ${MY_LIBS})
list (APPEND LINK_LIST debug ${x}_d optimized ${x})
endforeach()
target_link_libraries (mytarget
commonlib1
commonlib2
${LINK_LIST}
)
これにより、適切な
debug foo_d optimized foo
debug bar_d optimized bar
target_link_libraries
期待します。