1

ここで他の質問を読むと、ビジュアル スタジオ内で outdir マクロを変更できることがわかりました。私は本当に検索しましたが、その方法を見つけられませんでした/理解できませんでした。

至ってシンプルです。プロジェクト プロパティ -> 構成プロパティ -> 一般 -> 出力ディレクトリを変更したいだけです。それが outdir マクロを変更することを知っているからです。

ある種のcmake PROPERTYを使用してset_target_propertyを使用していることは理解していますが、実際にはその方法がわかりませんでした。

4

2 に答える 2

3

あなたが疑ったように、それはかなり簡単です。outdir パスを変更するにはARCHIVE_OUTPUT_DIRECTORY、 、LIBRARY_OUTPUT_DIRECTORY、およびtarget プロパティを確認する必要があります。RUNTIME_OUTPUT_DIRECTORY

これらにはすべて構成固有のバリアントもあり (例: )、先頭ARCHIVE_OUTPUT_DIRECTORY_DEBUGに を付けた同じ名前のグローバル CMake 変数によってすべて初期化できます。CMAKE_

だから、あなたは例えばすることができます

set_target_properties(MyExe PROPERTIES RUNTIME_OUTPUT_DIRECTORY <custom path>)

または、すべてのターゲットに影響を与えるには、

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY <custom path>)

注意。ドキュメントから:

マルチ構成ジェネレーター (VS、Xcode) は、指定されたディレクトリに構成ごとのサブディレクトリを追加します。

この動作を示す例を次に示します。独自の簡単な C++ ソース ファイルを作成するため、これをフォルダーにコピーし、CMake を呼び出して、結果のソリューションを Debug、Release、MinSizeRel、および RelWithDebInfo でビルドするだけです。VS2012 でテスト済み。実行可能ファイルは<build dir>/Exes/Debug、ビルドの種類に関係なく、常に最終的に になり、同様に、ライブラリは常に になり<build dir>/Libs/Debugます。

cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
project(Example)

file(WRITE lib.hpp "void Print();\n")
file(WRITE lib.cpp "#include<iostream>\nvoid Print() { std::cout << \"Hello World\\n\"; }\n")
file(WRITE main.cpp "#include \"lib.hpp\"\nint main() { Print(); return 0; }\n")

set(ArchiveOutputDir ${CMAKE_BINARY_DIR}/Libs/Debug)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${ArchiveOutputDir})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL ${ArchiveOutputDir})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${ArchiveOutputDir})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${ArchiveOutputDir})

set(RuntimeOutputDir ${CMAKE_BINARY_DIR}/Exes/Debug)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${RuntimeOutputDir})

add_library(MyLib lib.cpp lib.hpp)
add_executable(MyExe main.cpp)
target_link_libraries(MyExe MyLib)
于 2013-08-20T13:45:11.427 に答える