Как написать полностью одну конфигурацию вместо нескольких конфигураций на генераторе VC ++ - PullRequest
0 голосов
/ 25 апреля 2019

Сводка

Я пишу скрипт cmake для библиотек на разных платформах (Win32 VC ++ / mingw / linux / встроенные системы, генерирует файлы * .lib и * .a).

Как написать сценарий cmake для принудительного переопределения одиночной конфигурации в генераторе VC ++ и получить те же результаты для одиночного генератора конфигурации?

Справочная информация

Я буду использовать его в процессе CI, и мне нужно просто получить вывод сСтруктура каталогов такая же, как у одного генератора конфигурации, вероятно, "Unix Makefile" и др.

Я понимаю, что хорошо для множественной конфигурации, я буду использовать ее для проектирования и разработки цикла в Visual Studio.Но это препятствует процессу CI.

Например, генератор VC ++ построил скрипт MSBuild, и мы должны использовать с параметром конфигурации '--config':

cmake --build . -j --config Debug

И это компилирует местабиблиотека в конфигурации с именем subdir:

[outdir]/Debug/libil2c.lib

Но генератор Makefile Unix вызывает просто:

# "--config" argument not required because it was already configured with CMAKE_BUILD_TYPE=Debug
cmake --build . -j

И он размещает скомпилированную библиотеку напрямую:

[outdir]/libil2c.a

Мне нужноэто то же самое использование и те же результаты для генератора VC ++.

Связанные темы

Мы должны тщательно написать скрипт cmake с несколькими знаниями о конфигурации.Например, переменные могут (должны) неявно применять постфикс для «имя конфигурации:»

# For multiple configuration "Debug" usage.
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Od /Ob0 /Oi /RTC1 /GR /sdl /MTd -D_DEBUG")
# For multiple configuration "Release" usage.
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Ox /GL /GS /sdl- /MT -DNDEBUG")

Мы используем эту стратегию только для нескольких конфигураций.Мы можем написать просто, если мы нацелены на один генератор конфигурации (псевдокод):

if(DEFINED DEBUG)
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Od /Ob0 /Oi /RTC1 /GR /sdl /MTd -D_DEBUG")
else()
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Ox /GL /GS /sdl- /MT -DNDEBUG")
endif()

Стратегия этого примера может применяться ко всем другим целевым платформам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...