Я пытаюсь связать приложение Windows с Crypto ++ . Для этого я сделал следующее простое 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
Q: Я неправильно понял, как include_external_msproject
функционирует? Как мне сделать сборку проекта Crypto ++ для x64 при сборке вне Visual Studio?