我最近正在开展一个项目,其中包括 Emscripten 的使用。我可以在终端上安装并运行一些示例,但我想将其与 Clion 集成,以便我可以直接将 emscripten 包含到我的主项目中并构建它。我尝试将目录添加到 CMakeList
但在构建时出现错误。任何人都可以帮助我找到将 Emscripten 集成到 Clion 中的适当方法,或者对 CMakeList
中包含的内容有任何建议。任何帮助将不胜感激。感谢您宝贵的时间。
我将这些行包含在演示项目的 CMakeList 中:
cmake_minimum_required(VERSION 3.12)
project(projectShell)
set(CMAKE_CXX_STANDARD 14)
if (${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")
set(CMAKE_C_COMPILER "emcc")
endif ()
include_directories(include/rapidjson)
include_directories(/home/myfastcomp/emscripten/emscripten/system/include
)
add_executable(projectShell main.cpp library.cpp library.h)
if (${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")
set_target_properties(projectShell PROPERTIES LINK_FLAGS "-o
dist/projectShell.js -s USE_FREETYPE=1 -s DISABLE_EXCEPTION_CATCHING=0 -s DEMANGLE_SUPPORT=1 -s SAFE_HEAP=1 --bind -s WASM=1 -O2 -s LEGACY_GL_EMULATION=0 -s GL_UNSAFE_OPTS=0 --pre-js pre-module.js --post-js post-module.js -s ASSERTIONS=1 -s GL_ASSERTIONS=1 -s INVOKE_RUN=0 -std=c++11 -s USE_WEBGL2=1 -s FULL_ES3=1 -s USE_GLFW=3 -s OFFSCREENCANVAS_SUPPORT=1 --preload-file textures --preload-file shaders --preload-file fonts")
endif()
错误如下:
In file included from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL_config.h:45:0,
from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL_stdinc.h:31,
from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL_main.h:25,
from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL.h:72,
from /home/myfastcomp/emscripten/emscripten/system/include/emscripten/emscripten.h:27,
from /home/myfastcomp/emscripten/emscripten/system/include/emscripten.h:1,
from /home/CLionProjects/projectShell/library.h:8,
from /home/CLionProjects/projectShell/library.cpp:5:
/home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL_config_minimal.h:3 7:22: error: conflicting declaration ‘typedef unsigned int size_t’
typedef unsigned int size_t;
^~~~~~
In file included from /usr/include/stdio.h:33:0,
from /home/myfastcomp/emscripten/emscripten/system/include/emscripten/emscripten.h:24,
from /home/myfastcomp/emscripten/emscripten/system/include/emscripten.h:1,
from /home/CLionProjects/projectShell/library.h:8,
from /home/CLionProjects/projectShell/library.cpp:5:
/usr/lib/gcc/x86_64-linux-gnu/7/include/stddef.h:216:23: note: previous declaration as ‘typedef long unsigned int size_t’
typedef __SIZE_TYPE__ size_t;
^~~~~~
In file included from /usr/include/x86_64-linux-gnu/sys/types.h:156:0,
from /usr/include/stdlib.h:394,
from /usr/include/c++/7/cstdlib:75,
from /usr/include/c++/7/stdlib.h:36,
from /usr/lib/gcc/x86_64-linux-gnu/7/include/mm_malloc.h:27,
from /usr/lib/gcc/x86_64-linux-gnu/7/include/xmmintrin.h:34,
from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL_cpuinfo.h:59,
from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL.h:78,
from /home/myfastcomp/emscripten/emscripten/system/include/emscripten/emscripten.h:27,
from /home/hottab/myfastcomp/emscripten/emscripten/system/include/emscripten.h:1,
from /home/CLionProjects/projectShell/library.h:8,
from /home/CLionProjects/projectShell/library.cpp:5:
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:27:19: error: conflicting declaration ‘typedef __int64_t int64_t’
typedef __int64_t int64_t;
^~~~~~~
In file included from
/home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL_config.h:45:0,
from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL_stdinc.h:31,
from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL_main.h:25,
from /home/myfastcomp/emscripten/emscripten/system/include/SDL/SDL.h:72,
from /home/myfastcomp/emscripten/emscripten/
system/include/emscripten/emscripten.h:27,
from /home/myfastcomp/emscripten/emscripten/
system/include/emscripten.h:1,
from /home/CLionProjects/projectShell/library.h:8,
from /home/CLionProjects/projectShell/library.cpp:5:
/home/myfastcomp/emscripten/
emscripten/system/include/SDL/SDL_config_minimal.h:44:26:
note: previous declaration as ‘typedef long long int
int64_t’
typedef signed long long int64_t;
^~~~~~~
In file included from
/home/myfastcomp/emscripten/emscripten/
system/include/emscripten.h:1:0,
from /home/CLionProjects/projectShell/library.h:8,
from /home/CLionProjects/projectShell/library.cpp:5:
/home/myfastcomp/emscripten/emscripten/
system/include/emscripten/emscripten.h:135:194: error:
wrong number of arguments specified for ‘deprecated’
attribute
void emscripten_set_canvas_size(int width, int height)
__attribute__((deprecated("This variant does not allow
specifying the target canvas", "Use
emscripten_set_canvas_element_size() instead")));
^
/home/myfastcomp/emscripten/emscripten/
system/include/emscripten/emscripten.h:136:254: error:
wrong number of arguments specified for ‘deprecated’ attribute
void emscripten_get_canvas_size(int *width, int *height,
int *isFullscreen) __attribute__((deprecated("This
variant does not allow specifying the target canvas",
"Use emscripten_get_canvas_element_size() and
emscripten_get_fullscreen_status() instead")));
^
CMakeFiles/projectShell.dir/build.make:75: recipe for
target 'CMakeFiles/projectShell.dir/library.cpp.o'
failed
make[3]: ***
[CMakeFiles/projectShell.dir/library.cpp.o] Error 1
make[3]: *** Waiting for unfinished jobs....
CMakeFiles/Makefile2:72: recipe for target
'CMakeFiles/projectShell.dir/all' failed
make[2]: *** [CMakeFiles/projectShell.dir/all] Error 2
CMakeFiles/Makefile2:84: recipe for target
'CMakeFiles/projectShell.dir/rule' failed
make[1]: *** [CMakeFiles/projectShell.dir/rule] Error 2
Makefile:118: recipe for target 'projectShell' failed
make: *** [projectShell] Error 2
最佳答案
您可以通过创建工具链、设置正确的环境变量并设置编译选项来使用 emscripten 进行编译。
在构建、执行、部署>工具链中,添加一个新的系统工具链并将其命名为 Emscripten,并使用以下选项:
- CMake:没有变化
- 品牌:无变化
- C 编译器:emcc 的路径
- C++ 编译器:em++ 的路径
- 调试器:没有变化
然后在构建、执行、部署 > CMake 中添加新的配置文件,例如 Debug-Emscripten。选择 Emscripten 工具链。您将需要设置 emcmake
添加的 CMake 选项和环境变量。您可以通过设置环境变量 EM_BUILD_VERBOSE=3
来查看这些选项,但是,要查看需要在 emscripten 源代码 (/usr/lib/emscripten/tools/shared. py
在我的机器上的函数 get_building_env
中)。
要添加的 CMake 选项是:
-DCMAKE_CROSSCOMPILING_EMULATOR=路径/到/节点
-DCMAKE_TOOLCHAIN_FILE=path/to/cmake/Modules/Platform/Emscripten.cmake
我必须在我的机器上添加的环境变量是:
CC=路径/to/emscripten/emcc
CXX=路径/to/emscripten/em++
AR=路径/to/emscripten/emar
LD=路径/to/emscripten/emcc
NM=路径/to/emscripten-llvm/llvm-nm
LDSHARED=路径/to/emscripten/emcc
RANLIB=路径/to/emscripten/emranlib
EMMAKEN_COMPILER=路径/to/emscripten-llvm/clang++
EMSCRIPTEN_TOOLS=路径/to/emscripten/tools
HOST_CC=path/to/emscripten-llvm/clang
HOST_CXX=路径/to/emscripten-llvm/clang++
HOST_CFLAGS=-W
HOST_CXXFLAGS=-W
PKG_CONFIG_LIBDIR=路径/to/emscripten/system/local/lib/pkgconfig:路径/to/emscripten/system/lib/pkgconfig
PKG_CONFIG_PATH=
EMSCRIPTEN=路径/to/emscripten
CROSS_COMPILE=路径/to/emscripten/em
您现在应该能够通过选择 Debug-Emscripten 配置进行编译。
关于javascript - 将 Emscripten 集成到 Clion 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868832/