Сводка
Я пишу скрипт 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()
Стратегия этого примера может применяться ко всем другим целевым платформам.