2018-03-08 16:08:13 +08:00
# CMake Guide
2018-02-08 09:24:33 +08:00
2018-05-21 17:06:29 +08:00
CMake is an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generates native makefiles and workspaces that can be used in the compiler environment of your choice.
2018-02-08 09:24:33 +08:00
2018-03-08 16:08:13 +08:00
## Requirement
2018-02-08 09:24:33 +08:00
2018-05-21 17:06:29 +08:00
1. Open your terminal and execute:
```sh
cmake --version
```
2019-01-23 09:55:55 +08:00
if the CMake version is lower than 3.6, please upgrade.
2018-02-08 09:24:33 +08:00
2018-05-21 17:06:29 +08:00
2. You should use __out-of-source__ builds, this means you need to create a different directory than __cocos2d-x__ to execute the `cmake` command.
2018-03-08 16:08:13 +08:00
## Step by Step
2018-05-21 17:06:29 +08:00
### Linux
2018-02-08 09:24:33 +08:00
2018-03-08 16:08:13 +08:00
```sh
cd cocos2d-x
mkdir linux-build & & cd linux-build
cmake ..
make
```
2018-02-08 09:24:33 +08:00
2018-03-08 16:08:13 +08:00
Execute `make help` to see all build targets, `make <target>` build specified target
2018-02-08 09:24:33 +08:00
2018-05-21 17:06:29 +08:00
### Generate Visual Studio projects
2018-02-08 09:24:33 +08:00
2018-03-08 16:08:13 +08:00
```sh
cd cocos2d-x
mkdir win32-build & & cd win32-build
cmake .. -G"Visual Studio 15 2017" -Tv141
```
2019-01-23 09:55:55 +08:00
Execute `cmake --build .` to compile,
```
cmake --build . --config Debug
cmake --build . --config Release
```
or open __Cocos2d-x.sln__ in Explorer to use the generated project.
If can't found `MSVCR110.dll` issue occurs to you, please install this [Visual C++ Runtime Libraries ](https://www.microsoft.com/en-us/download/details.aspx?id=30679 ), when runing the cpp-tests project
2018-03-08 16:08:13 +08:00
### Generate macOS Project
```sh
cd cocos2d-x
2018-04-03 11:18:22 +08:00
mkdir mac-build & & cd mac-build
2018-03-08 16:08:13 +08:00
cmake .. -GXcode
open Cocos2d-x.xcodeproj
```
### Generate iOS Project
```sh
cd cocos2d-x
mkdir ios-build & & cd ios-build
cmake .. -GXcode -DCMAKE_TOOLCHAIN_FILE=../cmake/ios.toolchain.cmake
open Cocos2d-x.xcodeproj
```
2019-01-23 09:55:55 +08:00
The default build is for running on iOS device, if you want to run in the simulator, please add `-DIOS_PLATFORM=SIMULATOR` for architecture i386 or `-DIOS_PLATFORM=SIMULATOR64` for x86_64, but remember you can't run metal-support app in simulator because Apple limitation.
if you want to sign iOS app in CMake, you will need to fill development team ID into `set_xcode_property(${APP_NAME} DEVELOPMENT_TEAM "")` , or select to sign in Xcode after project files generated.
2018-04-03 11:18:22 +08:00
2018-05-21 17:06:29 +08:00
### Android Studio
2018-03-08 16:08:13 +08:00
2018-05-21 17:06:29 +08:00
We use the Gradle for Android applications, and Gradle use cmake to build the native code, see [gradle.properties ](https://github.com/cocos2d/cocos2d-x/blob/84be684e3858393a6f3efc50e3f95d4e0ac92a20/tests/cpp-empty-test/proj.android/gradle.properties#L38 ): `PROP_NDK_MODE` , it controls how native builds work.
2018-03-08 16:08:13 +08:00
```sh
2018-04-24 13:46:20 +08:00
# android native code build type
# none, native code will never be compiled.
# cmake, native code will be compiled by CMakeLists.txt
# ndk-build, native code will be compiled by Android.mk
2018-07-22 15:28:17 +08:00
PROP_BUILD_TYPE=cmake
2018-03-08 16:08:13 +08:00
```
2018-05-21 17:06:29 +08:00
If you want to add cmake build arguments, please add it at [external Native Build ](https://github.com/cocos2d/cocos2d-x/blob/84be684e3858393a6f3efc50e3f95d4e0ac92a20/tests/cpp-empty-test/proj.android/app/build.gradle#L25 ) block of __app/build.gradle__ file.
2018-03-08 16:08:13 +08:00
cmake support win32 ,and support generate&use prebuilt libs (#18683)
* fix win32 prebuilt error, and set cmake as default android native build
* cpp-template support msvc
* add msvc version check
* add -D_USRLUASTATIC, fix lua lib cmake compile error
* fix cpp-empty-test res copy dir, add function needed
* improve msvc res copy
* refactor cmake copy dll logic
* fix cpp-tests compile error
* refactor copy dll temp
* refactor win32 exe using dlls
* js-project compile support cmake using msvc
* improve res mark for win32
* update the way of lua project res mark
* add D_USRLUASTATIC for lua project
* unify RELEASE Release to Release, add CMAKE_CONFIGURATION_TYPES
* improve VS shows targets, add folder
* improve mac/ios res mark
* reduce useless comments
* unify cpp src include variable
* refactor cpp test project package logic
* improve pkg app logic
* start support prebuilt libs for cpp project using cmake
* improve prebuilt libs generate
* expand js/lua support prebuilt libs on mac
* adapt IDE generate libs path
* start do prebuilt for android
* improve the way of using external libs for prebuilt
* prebuilt libs support cpp-empty-test on android studio
* cpp-tests prebuilt libs, and remove useless
* start to improve libs using, to adapt prebuilt
* improve cpp tests prebuilt on android
* prebuilt support lua & js test on android
* prebuilt support cpp&js template
* rename prebuilt variabl, detail androd config
* finish android support prebuilt using cmake
* fix cmake script run in windows error
* reduce variable name length
* improve the way of win32 use dlls to adapt prebuilt
* loosen pick js/lua engine lib condition
* self review and start check linux build
* unify compile option location
* strict copy dlls condition
* improve libs link order
* start redo the way of copy dlls
* unify dlls copy logic
* fix linux res copy error
* update cmake copy file path in linux
* make prebuilt dir if needed, and divide Debug and Release dir
* cmake win32 divide Debug and Release dir well
* comment Lua Template project, for the unfinished lua simulator support
* add simulator cmake file
* start support simulator
* simulator support cmake build on macOS
* fix simulator compile error on win32
* add simulator prebuilt support
* improve mark cocos app macro
* improve cmake template project format
* improve cmake app files format
* fix format improve mistake
* detail cmake readme
* improve readme, useless comments
* add game.rc to template project
* check travis openssl version
* try update travis openssl
* upgrade travis openssl
* change openssl link
* change to upgrade openssl
* re install python with upgrade openssl
* add comment for macro and func, improve variable name
2018-03-08 09:47:57 +08:00
## Build Options
2018-05-21 17:06:29 +08:00
### CMake Common Build Options
cmake support win32 ,and support generate&use prebuilt libs (#18683)
* fix win32 prebuilt error, and set cmake as default android native build
* cpp-template support msvc
* add msvc version check
* add -D_USRLUASTATIC, fix lua lib cmake compile error
* fix cpp-empty-test res copy dir, add function needed
* improve msvc res copy
* refactor cmake copy dll logic
* fix cpp-tests compile error
* refactor copy dll temp
* refactor win32 exe using dlls
* js-project compile support cmake using msvc
* improve res mark for win32
* update the way of lua project res mark
* add D_USRLUASTATIC for lua project
* unify RELEASE Release to Release, add CMAKE_CONFIGURATION_TYPES
* improve VS shows targets, add folder
* improve mac/ios res mark
* reduce useless comments
* unify cpp src include variable
* refactor cpp test project package logic
* improve pkg app logic
* start support prebuilt libs for cpp project using cmake
* improve prebuilt libs generate
* expand js/lua support prebuilt libs on mac
* adapt IDE generate libs path
* start do prebuilt for android
* improve the way of using external libs for prebuilt
* prebuilt libs support cpp-empty-test on android studio
* cpp-tests prebuilt libs, and remove useless
* start to improve libs using, to adapt prebuilt
* improve cpp tests prebuilt on android
* prebuilt support lua & js test on android
* prebuilt support cpp&js template
* rename prebuilt variabl, detail androd config
* finish android support prebuilt using cmake
* fix cmake script run in windows error
* reduce variable name length
* improve the way of win32 use dlls to adapt prebuilt
* loosen pick js/lua engine lib condition
* self review and start check linux build
* unify compile option location
* strict copy dlls condition
* improve libs link order
* start redo the way of copy dlls
* unify dlls copy logic
* fix linux res copy error
* update cmake copy file path in linux
* make prebuilt dir if needed, and divide Debug and Release dir
* cmake win32 divide Debug and Release dir well
* comment Lua Template project, for the unfinished lua simulator support
* add simulator cmake file
* start support simulator
* simulator support cmake build on macOS
* fix simulator compile error on win32
* add simulator prebuilt support
* improve mark cocos app macro
* improve cmake template project format
* improve cmake app files format
* fix format improve mistake
* detail cmake readme
* improve readme, useless comments
* add game.rc to template project
* check travis openssl version
* try update travis openssl
* upgrade travis openssl
* change openssl link
* change to upgrade openssl
* re install python with upgrade openssl
* add comment for macro and func, improve variable name
2018-03-08 09:47:57 +08:00
1. __ `-G` __, generate native build project you specified, for example
* `-GXcode` generate Xcode project files.
* `-GVisual Studio 15 2017` generate Visual Studio 2017 project, the default toolset is v141, add `-T` option to specify toolset, like this `-Tv140`
1. __ `CMAKE_BUILD_TYPE` __, specify the build mode, Debug or Release
* `-DCMAKE_BUILD_TYPE=Release` to generate the Release mode project, the default build mode is Debug
1. __ `-H -B` __, `-H` specify the CMake project Home directory, `-B` specify CMake-generated project binary directory. for example
* `-H..\cocos2d-x -Bmsvc_build` the generated native project's location will be `msvc_build` directory.
1. __ `--build <dir>` __, build a CMake-generated project binary tree, for example
* `cmake --build ./msvc_build` , cmake will sellect corresponding build tools.
2019-01-23 09:55:55 +08:00
## Tips
1. Use `cmake ..` to refersh resources and code files, after you modify `Resources` or `CMakeLists.txt` .
1. Don't need `CMAKE_BUILD_TYPE` options when `-G` Xcode or Visual Studio, CMake scripts will generate both configurations, so you can switch `Debug` and `Release` in IDE.
2018-03-08 16:08:13 +08:00
## Useful Links
cmake support win32 ,and support generate&use prebuilt libs (#18683)
* fix win32 prebuilt error, and set cmake as default android native build
* cpp-template support msvc
* add msvc version check
* add -D_USRLUASTATIC, fix lua lib cmake compile error
* fix cpp-empty-test res copy dir, add function needed
* improve msvc res copy
* refactor cmake copy dll logic
* fix cpp-tests compile error
* refactor copy dll temp
* refactor win32 exe using dlls
* js-project compile support cmake using msvc
* improve res mark for win32
* update the way of lua project res mark
* add D_USRLUASTATIC for lua project
* unify RELEASE Release to Release, add CMAKE_CONFIGURATION_TYPES
* improve VS shows targets, add folder
* improve mac/ios res mark
* reduce useless comments
* unify cpp src include variable
* refactor cpp test project package logic
* improve pkg app logic
* start support prebuilt libs for cpp project using cmake
* improve prebuilt libs generate
* expand js/lua support prebuilt libs on mac
* adapt IDE generate libs path
* start do prebuilt for android
* improve the way of using external libs for prebuilt
* prebuilt libs support cpp-empty-test on android studio
* cpp-tests prebuilt libs, and remove useless
* start to improve libs using, to adapt prebuilt
* improve cpp tests prebuilt on android
* prebuilt support lua & js test on android
* prebuilt support cpp&js template
* rename prebuilt variabl, detail androd config
* finish android support prebuilt using cmake
* fix cmake script run in windows error
* reduce variable name length
* improve the way of win32 use dlls to adapt prebuilt
* loosen pick js/lua engine lib condition
* self review and start check linux build
* unify compile option location
* strict copy dlls condition
* improve libs link order
* start redo the way of copy dlls
* unify dlls copy logic
* fix linux res copy error
* update cmake copy file path in linux
* make prebuilt dir if needed, and divide Debug and Release dir
* cmake win32 divide Debug and Release dir well
* comment Lua Template project, for the unfinished lua simulator support
* add simulator cmake file
* start support simulator
* simulator support cmake build on macOS
* fix simulator compile error on win32
* add simulator prebuilt support
* improve mark cocos app macro
* improve cmake template project format
* improve cmake app files format
* fix format improve mistake
* detail cmake readme
* improve readme, useless comments
* add game.rc to template project
* check travis openssl version
* try update travis openssl
* upgrade travis openssl
* change openssl link
* change to upgrade openssl
* re install python with upgrade openssl
* add comment for macro and func, improve variable name
2018-03-08 09:47:57 +08:00
2018-05-21 17:06:29 +08:00
* CMake Official website: [cmake.org ](https://cmake.org/ )
2018-02-08 09:24:33 +08:00
2018-05-21 17:06:29 +08:00
* CMake Documentation: [cmake.org/documentation ](https://cmake.org/documentation/ )
2018-02-08 09:24:33 +08:00
2018-03-08 16:08:13 +08:00
* CMake FAQ: [Wiki/CMake_FAQ ](https://cmake.org/Wiki/CMake_FAQ )