Почему CMake / include_external_msproject не распространяет аргумент платформы? - PullRequest
0 голосов
/ 28 августа 2018

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

1 Ответ

0 голосов
/ 13 октября 2018

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

...