Как поменять VS toolset в CMake - PullRequest
       35

Как поменять VS toolset в CMake

0 голосов
/ 29 апреля 2020

Я строю свой проект с использованием CMake. Я использую «NMake Makefiles» в качестве генератора (VS генератор имеет некоторые проблемы с более сложными командами и перенаправлением stdout в файл).

У меня есть библиотека stati c, которая должна быть построена по-разному, используя Наборы инструментов VC2015, VC2017 и VC2019. Весь проект строится с использованием набора инструментов VC2019.

У меня есть две библиотеки: первая stati c и вторая общая. Общая библиотека вводится в stati c one и затем извлекается во время выполнения. Инъекция требует настройки файла library.h (часть библиотеки stati c).

Теперь мне нужно как-то переключить набор инструментов, но я не могу найти способ сделать это в CMake. Я пытался запустить cmake с другим двоичным каталогом и создать только одну цель, используя другой набор инструментов, но эта цель зависит от разделяемой библиотеки, которую нужно собрать только один раз (используя VC2019).

Есть ли способ переключения набора инструментов только для одной цели?

Мой код CMake выглядит так:

add_library(static STATIC "") # this library has to be build using different toolsets (VC2015, VC2017, VC2019)
add_library(shared SHARED "") # this has to be build only once (using VC2019)

add_custom_target(library.h DEPENDS shared) # part of static library
configure_file(library.h.in library.h) # here I inject size & md5 sum of shared

add_dependency(static shared library.h)
target_sources(static PRIVATE library.h library.c)

# these two libraries should be build using VC2015 & VC2017 respectively
add_library(static_vc2017 STATIC "")
add_library(static_vc2015 STATIC "")
add_dependency(static_vc2017 shared library.h)
add_dependency(static_vc2015 shared library.h)

# injecting shared into static (same for static_vc2015 & static_vc2017)
add_custom_command(TARGET static POST_BUILD
  COMMAND
     $<TARGET_NAME:fileinjector> $<TARGET_NAME:static> $<TARGET_NAME:shared>
  DEPENDS
    fileinjector
)

Возможно ли это с CMake? Я думал, что могу передать путь к разделяемой библиотеке как переменную в команде CMake, а затем зависит от того, как создать путь или просто использовать его, но я ищу лучшее (более чистое) решение.

...