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

标签 cmake emscripten vcpkg

vcpkg 和 Emscripten 都需要设置 CMAKE_TOOLCHAIN_FILE vcpkg/scripts/buildsystems/vcpkg.cmakeemsdk/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")
但它得到 找不到工具链文件 错误,我找不到让它工作的方法

最佳答案

令我高兴的是,最​​近 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 可执行文件。

关于带有 Emscripten 和 vcpkg 的 CMake 无法绑定(bind)两个 TOOLCHAIN_FILES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63062200/

相关文章:

c++ - CMake 错误 : Cannot determine link language for target

cmake - 仅在 Windows 上创建项目时如何设置 CMAKE_TOOLCHAIN_FILE

c++ - 如何通过 vcpkg 在 Windows 中使用 Facebook Wangle

c++ - 让 cURL 与 Visual Studios 2017 一起工作

cmake - 从与cmake使用的构建目录不同的目录运行ctest?

unix - cmake命令行的含义是什么

c++ - VTK + Cmake-> USE_VTK_RENDERING错误

java - 安装和使用 Emscripten

javascript - 我如何检测 Emscripten 生成的 .js 何时完成加载 wasm,以便我可以运行调用它的 JS 函数?

c++ - 使用 bazel 和 emscripten 构建 Web 程序集