CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
下载安装CMAKE
自行百度(((
安装完成后输入cmake
C:\Users\gloom>cmake
Usage
cmake [options] <path-to-source>
cmake [options] <path-to-existing-build>
cmake [options] -S <path-to-source> -B <path-to-build>
Specify a source directory to (re-)generate a build system for it in the
current working directory. Specify an existing build directory to
re-generate its build system.
Run 'cmake --help' for more information.
输出这些即为正确
使用Python3脚本进行构建
写一个普通的CMakeLists.txt,这里不多说了。
下载下面的脚本,并按要求修改
# Work With Python3
import os
import stat
from shutil import rmtree
from subprocess import check_call
def resolve_path(rel_path):
return os.path.abspath(os.path.join(os.path.dirname(__file__), rel_path))
def rmtree_silent(root):
def remove_readonly_handler(fn, root, excinfo):
if fn is os.rmdir:
if os.path.isdir(root): # if exists
os.chmod(root, stat.S_IWRITE) # make writable
os.rmdir(root)
elif fn is os.remove:
if os.path.isfile(root): # if exists
os.chmod(root, stat.S_IWRITE) # make writable
os.remove(root)
rmtree(root, onerror=remove_readonly_handler)
def makedirs_silent(root):
try:
os.makedirs(root)
except OSError: # mute if exists
pass
if __name__ == "__main__":
build_dir = resolve_path("build")
rmtree_silent(build_dir)
makedirs_silent(build_dir)
os.chdir(build_dir)
check_call([
"cmake",
os.path.expandvars(
"-DCMAKE_TOOLCHAIN_FILE=到Emscripten.cmake的路径,例如[D:\\Emscripten\\emscripten\\1.35.0\\cmake\\Modules\\Platform\\Emscripten.cmake]"),
"-DCMAKE_BUILD_TYPE=编译方式:Debug或者Release",
"-DCMAKE_MAKE_PROGRAM=编译的方法,例如mingw32-make",
"-G",
"Unix Makefiles",
".."
])
check_call(["make"])
运行即可完成编译,输出内容如下
-- Configuring done
-- Generating done
Scanning dependencies of target Test
[ 94%] Building CXX object CMakeFiles/Test.dir/src/Test.cpp.o
[100%] Linking CXX executable Test.js
[100%] Built target Test
到build文件夹下,运行
node Test.js
输出Hello World
就完成了