【问题标题】:How do I pass 'emcc' options through 'emcmake cmake/emmake make'?如何通过“emcmake cmake/emmake make”传递“emcc”选项?
【发布时间】:2021-01-03 14:19:00
【问题描述】:

我有一个 CMake 项目 (C++),我想通过 WebAssembly 在 JavaScript 中使用它。要配置它,我使用emcmake cmake 并构建它emmake make。当我手动编译时,我可以成功编译零件:

emcc --bind test.cpp

但我想从emmake 的优势中获利。我需要emcc 的参数--bindemmake默认不加,导致报错:

error: undefined symbol: _embind_register_function (referenced by top-level compiled C/C++ code)

那么,在使用emmake make 构建时,如何添加它?我可以把它传递给emmake吗?或者我可以在我的CMakeLists.txt 中添加一些内容吗?


MCRE:

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(MyTest)
add_executable(mytest test.cpp)

test.cpp:

#include "emscripten/bind.h"

using namespace emscripten;

std::string getText()
{
    return "Hello there from C++!";
}

EMSCRIPTEN_BINDINGS(my_module) {
    function("getText", &getText);
}

【问题讨论】:

    标签: c++ cmake emscripten emmake emcmake


    【解决方案1】:

    事实证明,您可以使用 set_target_properties(...)CMakeLists.txt 文件中传递 emcc 选项:

    CMakeLists.txt:

    cmake_minimum_required(VERSION 2.8)
    project(MyTest)
    add_executable(mytest test.cpp)
    set_target_properties(mytest PROPERTIES LINK_FLAGS "--bind")
    

    这种方法几乎适用于所有参数,除了用于控制输出文件的 -o 参数:

    • 如果要更改输出名称,请更改目标名称。
    • 如果要更改输出的目录,请在执行add_executable(...)之前用set(EXECUTABLE_OUTPUT_PATH subdir/for/emscripten)更改可执行输出路径
    • 如果你想改变输出的文件类型,在执行add_executable(...)之前,根据你的needs将可执行后缀set(CMAKE_EXECUTABLE_SUFFIX ".mjs")改成@

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2023-04-04
      • 2016-05-26
      相关资源
      最近更新 更多