Подтвердить что ты не робот

Установите каталог для промежуточных файлов (например .obj) в CMake

Я видел, что CMake помещает промежуточные файлы, например .obj, в каталог, подобный этому:

project.dir/sort/of/copy/of/source/directory

Есть ли способ иметь что-то вроде этого:

project.dir/Debug/ myfiles.obj    |--> for my debug

и

project.dir/Release/ myfiles.obj    |--> for my release

В течение минуты я использовал 2 отдельных каталога для генерации каждый раз, когда мои библиотеки или исполняемые файлы для Debug и release. И после того, как у меня есть платформа...

Есть ли что-то похожее на CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE или CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE...

для промежуточных файлов .obj?

Я тоже пытаюсь использовать /Fo, но когда я использовал этот FLAG, Cmake переопределяет его конфигурацию:

warning D9025 : overriding '/Fo;../x64/Debug/' with '/FoCMakeFiles\project.dir\src\project\main.cpp.obj'

Пожалуйста, у кого-то есть решение?

4b9b3361

Ответ 1

Вы не можете - по крайней мере, на данный момент, см. 0014999: изменение запроса промежуточной каталогов Visual Studio 2012 - изменение промежуточного каталоги в CMake и для генераторов makefile - как в вашем случае NMake - вы можете иметь только один тип конфигурации сборки для каталога вывода двоичной сборки.

Так как @usr1234567 прокомментировал, использование двух каталогов сборки - это правильная вещь.

Или - если это опция - используйте генератор мультиконфигурации Visual Studio. Он точно использует промежуточные каталоги, которые вы предложили:

project.dir/Debug/...
project.dir/Release/...

NMake vs. Visual Studio Solution в командной строке

Различия также можно увидеть в сценариях оболочки, которые я обычно использую для создания моих систем на основе CMake.

Итак, NMake будет выглядеть примерно так:

@ECHO off
"\Program Files (x86)\Microsoft Visual Studio 14.0\vc\vcvarsall.bat" x64
IF NOT EXIST "x64\Debug\Makefile" (
    cmake -H"." -B"x64/Debug" -DCMAKE_BUILD_TYPE=Debug -G"NMake Makefiles"
)
cmake --build "x64/Debug" --target "project"
IF NOT EXIST "x64\Release\Makefile" (
    cmake -H"." -B"x64/Release" -DCMAKE_BUILD_TYPE=Release -G"NMake Makefiles"
)
cmake --build "x64/Release" --target "project"

И мой предпочтительный вариант решения Visual Studio Solution выглядит примерно так:

@ECHO off
IF NOT EXIST "x64\*.sln" (
    cmake -H"." -B"x64" -G"Visual Studio 14 2015 Win64"
)
cmake --build "x64" --target "project" --config "Debug"
cmake --build "x64" --target "project" --config "Release"

Дополнительные ссылки