例えば以下のような CMakeLists.txtを用意し、
cmake_minimum_required(VERSION 3.16)
# プロジェクト名と使用言語
project(MyApp LANGUAGES CXX)
# C++標準(必要に応じて変更)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 実行ファイルを作成(出力名=MyApp、ソース=main.cpp)
add_executable(MyApp main.cpp)
# /MD
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Debug>:Debug>")
以下でVC++のソリューションとプロジェクトを作成する。
と、プロジェクトの出力先が絶対パスになる。これの何が問題かというとディレクトリごとコピーしてプロジェクト複製したときに出力先が変わらない。

別に手で直せばいい。量もたいしたことは無いので、
とすれば良い。もし自動でやるなら、vcxprojファイルに書かれているので、xmlを編集する要領で書ける。
#include <iostream> #include <fstream> #include "pugixml.hpp" void fix_outdir(const char* path) { pugi::xml_document doc; if (!doc.load_file(path)) return; // 全 OutDir を対象に書き換え for (auto outdir : doc.select_nodes("//OutDir"))// //OutDir とすると、出現する全てのOutDirという意味になる { pugi::xml_node n = outdir.node(); n.text() = "$(SolutionDir)$(Platform)\\$(Configuration)\\"; } doc.save_file(path); } int main() { std::string vcxproj_path = R"(C:\myusertemp\test\build\MyApp.vcxproj)"; fix_outdir(vcxproj_path.c_str()); }