为什么CMake / include_external_msproject不传播平台参数?

时间:2018-08-28 07:54:38

标签: cmake crypto++

我正在尝试将Windows应用程序链接到Crypto++。为此,我做了以下简单的CMakeLists.txt,包括通过include_external_msprojectcryptlib.vcxproj项目,根据构建配置为PLATFORM指定了Win32或x64。

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时,仍然为Win32构建Crypto ++项目,自然会导致构建失败。

在VS2017中打开并构建生成的x64项目的工作原理-Crypto ++是为x64构建的,其输出文件位于 ..\cryptopp\x64\Output\Release\cryptlib.lib符合预期。

我已经在最新的CMake 3.12.1中进行过尝试

问:我是否误解了include_external_msproject的功能?在Visual Studio外部构建时,如何使Crypto ++项目针对x64构建?

1 个答案:

答案 0 :(得分:0)

此结果以bug结尾,并已在CMake 3.13.0中修复