Почему CMake / include_external_msproject не передает аргумент платформы?

Пытаюсь связать приложение Windows с Крипто ++. Для этого я сделал следующий простой CMakeLists.txt, включая проект cryptlib.vcxproj через include_external_msproject, указав Win32 или x64 для PLATFORM в зависимости от конфигурации сборки.

cmake_minimum_required( VERSION 3.8)

project(test)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

if ( ${CMAKE_SIZEOF_VOID_P} MATCHES "8" )
    set(CRYPTOPP_PLATFORM x64)
    message(STATUS "Platform: ${CRYPTOPP_PLATFORM}")
else()
    set(CRYPTOPP_PLATFORM Win32)
endif ()

if ( ${CMAKE_BUILD_TYPE} MATCHES "Debug" )
    set(CRYPTOPP_MODE Debug)
else()
    set(CRYPTOPP_MODE Release)
endif ()

include_external_msproject(cryptopp ${CMAKE_CURRENT_LIST_DIR}/cryptopp/cryptlib.vcxproj PLATFORM ${CRYPTOPP_PLATFORM})

add_dependencies(${PROJECT_NAME} cryptopp)
target_link_libraries(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/cryptopp/${CRYPTOPP_PLATFORM}/Output/${CRYPTOPP_MODE}/cryptlib.lib)

Чтобы сгенерировать проект Win32, я запускаю cmake -G "Visual Studio 15 2017" .., затем cmake --build . --config Release, и все в порядке; Crypto ++ создан для платформы Win32, и приложение связано с ней.

cryptlib.vcxproj -> C:\code\Test\cryptopp\Win32\Output\Release\cryptlib.lib

Моя проблема в том, что при сборке для x64, cmake -G "Visual Studio 15 2017 Win64" .., а затем cmake --build . --config Release проект Crypto ++ по-прежнему создается для Win32, что, естественно, приводит к неудачной сборке.

Открытие и сборка сгенерированного проекта x64 в VS2017 работает - Crypto ++ построен для x64 с выходным файлом в ..\cryptopp\x64\Output\Release\cryptlib.lib, как и ожидалось.

Я пробовал это с последней версией CMake, 3.12.1

Вопрос: Я неправильно понял, как работает include_external_msproject? Как сделать сборку проекта Crypto ++ для x64 при сборке вне Visual Studio?

Связанный, Crypto ++ имеет файлы проекта CMake в криптопп-cmake. Также см. CMake на вики-странице Crypto ++.

jww 28.08.2018 19:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
727
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это закончилось как ошибка и зафиксировано в CMake 3.13.0

Другие вопросы по теме