web-dev-qa-db-ja.com

cmake:静的ライブラリのデバッグビルドに「d」サフィックスを追加

ここで説明したものと同様のライブラリの命名スキームを実装したいと思います: x32とx64のライブラリ名

CMakeLists.txtファイルは、静的ライブラリを作成するように設定されています

add_library(test test.h test.cpp)

CmakeリストからVisualStudioソリューションを作成した後、プロジェクトは、デバッグライブラリtest.libが/x64/Debug/test.libに書き込まれ、リリースバージョンが/x64/Release/test.libに書き込まれるように設定されます。両方を/lib/に書き込みたいのですが、デバッグバージョンに「d」を追加します。アイデアは取得することです

/lib/test.lib
/lib/testd.lib

可能であれば、64ビットビルド用の追加のサフィックスを取得します

/lib/test.lib
/lib/test64.lib
/lib/testd.lib
/lib/test64d.lib

これを行う簡単な方法はありますか?


編集:これは、次のようなライブラリを使用して、プロジェクトで後でうまく使用できます: Windows上のCmakeでデバッグビルドとリリースビルドの異なるライブラリをリンクしますか?


編集:出力からDebugフォルダーとReleaseフォルダーを削除する際に問題が発生しました。これは、次の回答で修正できます。 ReleaseまたはDebugを出力パスに追加しない方法は?

6
Beginner

CMAKE_DEBUG_POSTFIX は、デバッグライブラリのdを追加するために使用されます。

set(CMAKE_DEBUG_POSTFIX d)

これをグローバルに設定したくない場合は、選択したライブラリで代わりに DEBUG_POSTFIX ターゲットプロパティを使用することもできます。

32/64ビットビルドを区別するための対応する機能はありませんが、同じCMake構成でこれら2つを混在させることは不可能であるため、これらのケースを手動で簡単に区別できます。

if(CMAKE_SIZEOF_VOID_P EQUAL 4)
    set(Arch_POSTFIX "")
else()
    set(Arch_POSTFIX 64)
endif()

add_library(my_lib${Arch_POSTFIX} [...])

または、異なるアーキテクチャで同じターゲット名を使用する場合は、 CMAKE_STATIC_LIBRARY_SUFFIX のような変数を設定します(それらは多数存在するため、適切なものを選択できます。ターゲットタイプと、サフィックスを追加する出力ファイルに基づきます)。

また、そのようなライブラリを見つけるために この回答 についても言及したので:target_link_librariesの粗粒度のレガシーdebugおよびoptimized修飾子の代わりにインポートされたターゲットを使用することをお勧めします。 構成ファイルパッケージ このようなインポートされたターゲットをクライアントに公開する便利な方法を提供し、サフィックスのシェナニガンも自動的に処理します。

9
ComicSansMS