Пытаюсь связать приложение 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?





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