CMake генерация .sln(Visual Studo)

181
23 марта 2018, 13:00

Есть CMake скрипт для С++ проекта, c таким содержимым:

#...
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug_static")
    add_library(${PROJECT_NAME} STATIC ${SRC_FILES} ${HEADERS_FILES})
endif()
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
    add_library(${PROJECT_NAME} SHARED ${SRC_FILES} ${HEADERS_FILES})
endif()
if(${CMAKE_BUILD_TYPE} STREQUAL "Release_static")
    add_library(${PROJECT_NAME} STATIC ${SRC_FILES} ${HEADERS_FILES})
endif()
if(${CMAKE_BUILD_TYPE} STREQUAL "Release")
    add_library(${PROJECT_NAME} SHARED ${SRC_FILES} ${HEADERS_FILES})
endif()
#...

В зависимости от типа сборки, тип библиотеки разный. При компиляции все работает как и задумано, но при попытке сгенерировать .sln для Visual Studo все идет не так.

cmake -G "Visual Studio 15 2017 Win64"

CMake запускается без CMAKE_BUILD_TYPE => Все проверки if оказываются FALSE => нет тагета нет солюшена.

Если задать CMAKE_BUILD_TYPE

cmake -DCMAKE_BUILD_TYPE=Debug_static -G "Visual Studio 15 2017 Win64"

то все 4 конфигурации получаться такие же как Debug_static.

Вроде как, на этот случай были придуманы generator-expressions, но вот именно тип библиотеки ими задать нельзя.

Вопрос. Как заставить CMake сгенерировать солюшен эквивалентный приведенному скрипту? Чтобы было 4 конфигурации: 2 static и 2 shared.

READ ALSO
Dev C++ странно оперирует в cout с декрементом

Dev C++ странно оперирует в cout с декрементом

int t = 10; cout << t << endl << t * 2 << endl << --t;

180
Последовательность чисел

Последовательность чисел

Есть задача, ее я решил и пока программа работает с маленькими числами ответы выводит правильноНо когда мы берем более большие числа ответы...

205
Как сделать тоже самое с помощью адресации?

Как сделать тоже самое с помощью адресации?

Задан массив char str[stolb][dlina]; а также:

244
Console Diary - дневник в консоли

Console Diary - дневник в консоли

Сделал свой второй небольшой, но интересный проект, дневник в консолиВсе записи сохраняются в файлах с именами по дате создания

180