如何通过“emcmake cmake/emmake make”传递“emcc”选项?

sta*_*tor 9 c++ cmake emscripten emmake emcmake

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

emcc --bind test.cpp
Run Code Online (Sandbox Code Playgroud)

但我想从 的优势中获利emmake--bind我需要的参数emccemmake默认情况下不添加它,这会导致错误:

error: undefined symbol: _embind_register_function (referenced by top-level compiled C/C++ code)
Run Code Online (Sandbox Code Playgroud)

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


麦克雷:

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(MyTest)
add_executable(mytest test.cpp)
Run Code Online (Sandbox Code Playgroud)

test.cpp:

cmake_minimum_required(VERSION 2.8)
project(MyTest)
add_executable(mytest test.cpp)
Run Code Online (Sandbox Code Playgroud)

sta*_*tor 10

事实证明,您可以使用emcc以下命令从文件内传递选项:CMakeLists.txtset_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")
Run Code Online (Sandbox Code Playgroud)

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

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