Недавно я работаю над проектом, который включает использование 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
Да, я пробовал это, и при создании я получаю ошибки, такие как конфликтующее объявление, отсутствие бинарного оператора перед токеном и многое другое, что указывает на неправильную конфигурацию CMakeList.
"при строительстве есть ошибки" ... что это за ошибки? Без вывода мы можем только догадываться. Может вы пропустили ссылку на библиотеку?
Простите за это. Я обновил, пожалуйста, посмотрите



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


CLion плохо понимает концепции команд emcmake и emmake. На данный момент лучше всего запустить это с терминала.
Теоретически должна быть возможность не использовать команду emcmake и настроить параметры CMake CLion для использования файла cmake инструментальной цепочки, специфичного для emscripten, но по какой-то причине это не работает.
Вы можете скомпилировать с помощью emscripten, создав инструментальную цепочку, установив правильные переменные среды и установив параметры компиляции.
В Сборка, выполнение, развертывание> Цепочки инструментов добавьте новую системную цепочку инструментов и назовите ее Emscripten со следующими параметрами:
Затем в Сборка, выполнение, развертывание> CMake добавьте новый профиль, например Debug-Emscripten. Выберите Emscripten Toolchain. Вам нужно будет установить параметры CMake и переменные среды, которые добавляет emcmake. Вы можете увидеть параметры, установив переменную среды EM_BUILD_VERBOSE=3, однако, чтобы увидеть среду, в которой вам нужно покопаться в исходном коде emscripten (/usr/lib/emscripten/tools/shared.py на моей машине в функции get_building_env).
Параметры CMake для добавления:
-DCMAKE_CROSSCOMPILING_EMULATOR=path/to/node-DCMAKE_TOOLCHAIN_FILE=path/to/cmake/Modules/Platform/Emscripten.cmakeПеременные среды, которые мне пришлось добавить на свой компьютер, были:
CC=path/to/emscripten/emccCXX=path/to/emscripten/em++AR=path/to/emscripten/emarLD=path/to/emscripten/emccNM=path/to/emscripten-llvm/llvm-nmLDSHARED=path/to/emscripten/emccRANLIB=path/to/emscripten/emranlibEMMAKEN_COMPILER=path/to/emscripten-llvm/clang++EMSCRIPTEN_TOOLS=path/to/emscripten/toolsHOST_CC=path/to/emscripten-llvm/clangHOST_CXX=path/to/emscripten-llvm/clang++HOST_CFLAGS=-WHOST_CXXFLAGS=-WPKG_CONFIG_LIBDIR=path/to/emscripten/system/local/lib/pkgconfig:path/to/emscripten/system/lib/pkgconfigPKG_CONFIG_PATH=EMSCRIPTEN=path/to/emscriptenCROSS_COMPILE=path/to/emscripten/emТеперь вы можете скомпилировать, выбрав конфигурацию Debug-Emscripten.
Но я исправил это с помощью инструментария MSYS2 в Windows 10.
Я установил набор инструментов для emscripten в настройках-> build-> cmake с -DCMAKE_TOOLCHAIN_FILE=..../sdks/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
В проекте cmake я привязываю исходник к исполняемому файлу. Для флагов компиляции я использую params.
set(CMAKE_EXECUTABLE_SUFFIX ".js")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s NO_EXIT_RUNTIME=1 -s
EXTRA_EXPORTED_RUNTIME_METHODS=['callMain']")
Вы проверили этот ответ? stackoverflow.com/questions/45260216/…