cmake - 为什么 CMake / include_external_msproject 不传播平台参数?
问题描述
我正在尝试将 Windows 应用程序与Crypto++链接起来。为此,我进行了以下简单操作CMakeLists.txt
,包括cryptlib.vcxproj
项目 via ,根据构建配置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 构建的,自然导致构建失败。
..\cryptopp\x64\Output\Release\cryptlib.lib
在 VS2017 中打开并构建生成的 x64 项目有效 - Crypto++ 是为 x64 构建的,并按预期包含输出文件
。
我已经用最新的 CMake 3.12.1 试过了
问:我是否误解了include_external_msproject
函数的功能?在 Visual Studio 之外构建时,如何为 x64 构建 Crypto++ 项目?
解决方案
这最终成为一个错误并在CMake 3.13.0中修复
推荐阅读
- cluster-analysis - 如何在 Sklearn 中使用带有混合(分类和数字)数据的 silhouette_score?
- asp.net-mvc - (MVC) 我的共享 _Layout 中有一个搜索栏。它适用于其他视图,但不适用于 _Layout
- php - return redirect('/') 和 Redirect::to('/')->send() 有什么区别?laravel 中的函数
- snowflake-cloud-data-platform - 用于雪花的 Kafka 连接器不断失败
- node.js - 错误 node_modules/jest-diff/build/diffLines.d.ts(8,13): 错误 TS1005: '=' 预期。在嵌套js中
- amazon-web-services - 如何通过 AutoScaling 动态增加 AWS EMR 上的 ulimit?
- clone - 乐克隆物体没有沉没
- django - 如何在 Django 中以编程方式将用户添加到组
- javascript - 我希望选择 HTML 表格单元格并在屏幕上可见
- c++ - libcurl 简单的 C 文件下载器示例立即返回