154 lines
3.7 KiB
ReStructuredText
154 lines
3.7 KiB
ReStructuredText
Build cglm
|
||
================================
|
||
|
||
| **cglm** does not have any external dependencies.
|
||
|
||
**NOTE:**
|
||
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
|
||
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
|
||
|
||
CMake (All platforms):
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. code-block:: bash
|
||
:linenos:
|
||
|
||
$ mkdir build
|
||
$ cd build
|
||
$ cmake .. # [Optional] -DCGLM_SHARED=ON
|
||
$ make
|
||
$ sudo make install # [Optional]
|
||
|
||
**make** will build cglm to **build** folder.
|
||
If you don't want to install **cglm** to your system's folder you can get static and dynamic libs in this folder.
|
||
|
||
**CMake Options:**
|
||
|
||
.. code-block:: CMake
|
||
:linenos:
|
||
|
||
option(CGLM_SHARED "Shared build" ON)
|
||
option(CGLM_STATIC "Static build" OFF)
|
||
option(CGLM_USE_C99 "" OFF) # C11
|
||
option(CGLM_USE_TEST "Enable Tests" OFF) # for make check - make test
|
||
|
||
**Use as header-only library with your CMake project example**
|
||
This requires no building or installation of cglm.
|
||
|
||
.. code-block:: CMake
|
||
:linenos:
|
||
|
||
cmake_minimum_required(VERSION 3.8.2)
|
||
|
||
project(<Your Project Name>)
|
||
|
||
add_executable(${PROJECT_NAME} src/main.c)
|
||
target_link_libraries(${LIBRARY_NAME} PRIVATE
|
||
cglm_headers)
|
||
|
||
add_subdirectory(external/cglm/ EXCLUDE_FROM_ALL)
|
||
|
||
**Use with your CMake project example**
|
||
|
||
.. code-block:: CMake
|
||
:linenos:
|
||
|
||
cmake_minimum_required(VERSION 3.8.2)
|
||
|
||
project(<Your Project Name>)
|
||
|
||
add_executable(${PROJECT_NAME} src/main.c)
|
||
target_link_libraries(${LIBRARY_NAME} PRIVATE
|
||
cglm)
|
||
|
||
add_subdirectory(external/cglm/)
|
||
|
||
Meson (All platforms):
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. code-block::
|
||
:linenos:
|
||
|
||
$ meson build # [Optional] --default-library=static
|
||
$ cd build
|
||
$ ninja
|
||
$ sudo ninja install # [Optional]
|
||
|
||
**Meson Options:**
|
||
|
||
.. code-block::
|
||
:linenos:
|
||
|
||
c_std=c11
|
||
buildtype=release
|
||
default_library=shared
|
||
enable_tests=false # to run tests: ninja test
|
||
|
||
|
||
**Use with your Meson project**
|
||
|
||
.. code-block::
|
||
:linenos:
|
||
|
||
# Clone cglm or create a cglm.wrap under <source_root>/subprojects
|
||
project('name', 'c')
|
||
|
||
cglm_dep = dependency('cglm', fallback : 'cglm', 'cglm_dep')
|
||
|
||
executable('exe', 'src/main.c', dependencies : cglm_dep)
|
||
|
||
|
||
Unix (Autotools):
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. code-block:: bash
|
||
:linenos:
|
||
|
||
$ sh autogen.sh
|
||
$ ./configure
|
||
$ make
|
||
$ make check # run tests (optional)
|
||
$ [sudo] make install # install to system (optional)
|
||
|
||
**make** will build cglm to **.libs** sub folder in project folder.
|
||
If you don't want to install **cglm** to your system's folder you can get static and dynamic libs in this folder.
|
||
|
||
Windows (MSBuild):
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Windows related build files, project files are located in `win` folder,
|
||
make sure you are inside in cglm/win folder.
|
||
|
||
Code Analysis are enabled, it may take awhile to build.
|
||
|
||
.. code-block:: bash
|
||
:linenos:
|
||
|
||
$ cd win
|
||
$ .\build.bat
|
||
|
||
if *msbuild* is not worked (because of multi versions of Visual Studio)
|
||
then try to build with *devenv*:
|
||
|
||
.. code-block:: bash
|
||
:linenos:
|
||
|
||
$ devenv cglm.sln /Build Release
|
||
|
||
Currently tests are not available on Windows.
|
||
|
||
Documentation (Sphinx):
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
**cglm** uses sphinx framework for documentation, it allows lot of formats for documentation. To see all options see sphinx build page:
|
||
|
||
https://www.sphinx-doc.org/en/master/man/sphinx-build.html
|
||
|
||
Example build:
|
||
|
||
.. code-block:: bash
|
||
:linenos:
|
||
|
||
$ cd cglm/docs
|
||
$ sphinx-build source build
|