Опция указания проблемы при использовании Emscripten (Emcmake)
Мой вопрос касается использования CMakeLists.txt
с Emscriptem и указанием типа вывода вместе с параметром командной строки.
Я хочу взять простую команду Emscripten, такую как: emcc file.cpp -o file.html --preload-file asset_dir/
и измените его на то, что я могу указать в моей системе CMake. Я попробовал наивный подход переименования исполняемого файла, чтобы иметь расширение HTML, но это не сработало. Я также пытался использовать -D--preload-file:PATH=asset_dir
и это тоже не сработало.
мой CMakeLists.txt
Файл небольшой и содержится ниже. Я использую команду emcmake cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=em++ .. && emmake make
построить это.
CMAKE_MINIMUM_REQUIRED(VERSION 3.2.0 FATAL_ERROR)
PROJECT(ProjJS)
# Set typical CMAKE settings
SET(CMAKE_BUILD_TYPE_INIT "Release")
SET(CMAKE_VERBOSE_MAKEFILE OFF CACHE BOOL "Turn on Verbose Makefiles" FORCE)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(PROJ_SOURCES
hello.cpp
....
)
set(NAME_OF_EXE "ProjJS")
set(BOOST_LIB "boost")
set(BOOST_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extlibs/")
set(BOOST_LIB_PATH "${CMAKE_SOURCE_DIR}/extlibs/boost/libs/")
add_subdirectory(extlibs/boost)
SET(BOOST_PROGRAM_OPTIONS_SOURCES
${BOOST_LIB_PATH}/program_options/cmdline.cpp
${BOOST_LIB_PATH}/program_options/config_file.cpp
....
)
SET(BOOST_SYSTEM_SOURCES
${BOOST_LIB_PATH}/system/error_code.cpp
)
ADD_EXECUTABLE(${NAME_OF_EXE} ${PROJ_SOURCES})
add_library(${BOOST_LIB} STATIC ${BOOST_PROGRAM_OPTIONS_SOURCES} ${BOOST_SYSTEM_SOURCES})
TARGET_INCLUDE_DIRECTORIES(${BOOST_LIB} PUBLIC "${BOOST_INCLUDE_PATH}")
TARGET_LINK_LIBRARIES(${NAME_OF_EXE} PUBLIC ${BOOST_LIB})
TARGET_INCLUDE_DIRECTORIES(${NAME_OF_EXE} BEFORE PRIVATE "${CMAKE_SOURCE_DIR}/include")
TARGET_INCLUDE_DIRECTORIES(${NAME_OF_EXE} BEFORE PRIVATE "${BOOST_INCLUDE_PATH}" ${PROJ_SOURCES})
0 ответов
Для суффикса вывода это должно работать:
set(CMAKE_EXECUTABLE_SUFFIX ".html")
Полный пример:
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(demo)
set(CMAKE_EXECUTABLE_SUFFIX ".html")
add_executable(hello tests/hello_world.cpp)
Это будет излучать hello.html
и т.п.
Для других флагов лучший вариант, который я нашел, - использовать target_link_libraries
который CMake просто добавляет в строку ссылки и может содержать что угодно. Например:
target_link_libraries(binaryen_js "-s MODULARIZE")
target_link_libraries(binaryen_js "-s INITIAL_MEMORY=512MB")
Это включает модуляризацию и устанавливает начальную память на 512 МБ (пример из сценария Binaryen CMake).