4

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

emcc --bind test.cpp

但我想从emmake. 我需要--bind. 默认不添加,导致报错:emccemmake

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);
}
4

1 回答 1

3

事实证明,您可以使用以下命令emccCMakeLists.txt文件中传递选项set_target_properties(...)

CMakeLists.txt

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

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

  • 如果要更改输出的名称,请更改目标的名称。
  • 如果要更改输出目录,请set(EXECUTABLE_OUTPUT_PATH subdir/for/emscripten)在执行前更改可执行输出路径add_executable(...)
  • 如果要更改输出的文件类型,请在执行前set(CMAKE_EXECUTABLE_SUFFIX ".mjs")根据需要更改可执行后缀add_executable(...)
于 2020-09-17T15:12:46.760 回答