带有 Emscripten 和 vcpkg 的 CMake 无法绑定两个 TOOLCHAIN_FILES

问题描述 投票:0回答:2

vcpkg和Emscripten都需要设置CMAKE_TOOLCHAIN_FILE

vcpkg/scripts/buildsystems/vcpkg.cmake
emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
分别。

我该怎么做?或者让他们一起工作的最好方法是什么?

现在我有一个天真的尝试:

set(CMAKE_TOOLCHAIN_FILE "/Users/screen-photo-to-text/vcpkg/scripts/buildsystems/vcpkg.cmake" "/Users/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake")

但是它得到找不到工具链文件错误,我找不到让这个工作的方法

cmake emscripten vcpkg
2个回答
3
投票

令我高兴的是,最近 vcpkg 获得了 Emscripten 支持 - 请参阅 PR.

可以像这样安装包:

vcpkg install zlib:wasm32-emscripten

用法是非常普通的标准,例如 CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(zpipe CXX)
find_package(ZLIB REQUIRED)
add_executable(zpipe zpipe.cpp)
target_link_libraries(zpipe ZLIB::ZLIB)

棘手的部分仍然是如何组合两个工具链的问题。这个调用对我有用:

mkdir build
cd build
emcmake "c:\Program files\CMake\bin\cmake" .. "-G" "Ninja" "-DCMAKE_MAKE_PROGRAM=F:/vcpkg/downloads/tools/ninja/1.10.1-windows/ninja.exe" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=%EMSDK%/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" "-DVCPKG_TARGET_TRIPLET=wasm32-emscripten" "-DCMAKE_TOOLCHAIN_FILE=F:/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_BUILD_TYPE=Release"
emmake ninja

通常,这需要首先设置 Emscripten 环境变量(例如使用

emsdk_env.bat
)。

未能提供此要求的第二个工具链将导致像

wasm-ld: error: unknown argument: --out-implib

这样的错误

如果出于某种原因(例如,不是绝对路径)emcmake 找不到 CMake 可执行文件,它可能会导致像

FileNotFoundError: [WinError 2] The system cannot find the file specified

这样的错误

CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.
的情况下,如提示的那样,需要将
CMAKE_MAKE_PROGRAM
设置为指向 ninja 可执行文件。


0
投票

您设置 VCPKG_CHAINLOAD_TOOLCHAIN_FILE 变量(连同 VCPKG_TARGET_TRIPLET)

cmake^ 
  "-DCMAKE_TOOLCHAIN_FILE=%VCPKG%/scripts/buildsystems/vcpkg.cmake"^
  "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=%EMSDK%/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"^  
  "-DVCPKG_TARGET_TRIPLET=wasm32-emscripten"

当然还有你喜欢的构建设置。 我不确定你是否需要 emcmake,但在这个和上面的答案之间选择任何有效的。这对我有用,显然对其他人也有用。

© www.soinside.com 2019 - 2024. All rights reserved.