【发布时间】:2017-02-21 22:42:14
【问题描述】:
我的问题是关于在 Emscriptem 中使用 CMakeLists.txt 并指定输出类型以及命令行选项。
我想使用一个简单的 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})
【问题讨论】:
-
我不熟悉
emscripten,但它似乎与“普通”编译器有很大不同。因此,仅更改编译器可执行文件并期望 CMake 完成其他工作是不够的。除了编译器本身,您还需要调整许多其他与编译器相关的东西。最好的方法是toolchain file。您可以准备自己的工具链文件,或 google 现有的。例如,您可以尝试this toolchain。 -
你弄明白了吗?我坚持同样的(刚刚做了一张票stackoverflow.com/questions/45260216/…)
标签: c++ cmake emscripten