Skip to content

CMake Build Script #3

@winder

Description

@winder

To make the project more portable something like CMake would help a lot. Basically CMake is a project generator, on my mac it has the following targets, on windows it would have several visual studio projects as well:

The following generators are available on this platform:
Unix Makefiles = Generates standard UNIX makefiles.
Ninja = Generates build.ninja files.
Xcode = Generate Xcode project files.
CodeBlocks - Ninja = Generates CodeBlocks project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
CodeLite - Ninja = Generates CodeLite project files.
CodeLite - Unix Makefiles = Generates CodeLite project files.
Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
KDevelop3 = Generates KDevelop 3 project files.
KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files.
Kate - Ninja = Generates Kate project files.
Kate - Unix Makefiles = Generates Kate project files.
Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.
Sublime Text 2 - Unix Makefiles
= Generates Sublime Text 2 project files.

I spent a little time this morning trying to remember how to use it and got far enough that it generates a project (but doesn't compile all the way).

GSharp/CMakeLists.txt

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)

project (GSharp)

## Set the build type
if( NOT CMAKE_BUILD_TYPE )
  set( CMAKE_BUILD_TYPE "Release"
       CACHE STRING "Build configuration 'Release' or 'Debug'."
       FORCE )
endif()

## Install the executable to <install_directory>/bin
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
## Install libraries (if any) to <install_directory>/bin
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

add_subdirectory(${PROJECT_SOURCE_DIR}/src)
add_subdirectory(${PROJECT_SOURCE_DIR}/include)

## C++ compiler options
set( CMAKE_CXX_FLAGS "-Wall -Wextra" )
set( CMAKE_CXX_FLAGS_DEBUG "-g -O0" )
set( CMAKE_CXX_FLAGS_RELEASE "-O3" )

set( BINARY_NAME "gs2g" )

set(ALL_SOURCE_FILES ${GSharp_SOURCE} ${GSharp_INCLUDE})
MESSAGE(${GSharp_SOURCE})
MESSAGE(${GSharp_INCLUDE})
MESSAGE(${ALL_SOURCE_FILES})

#add_executable( ${BINARY_NAME} example.cpp ${ALL_SOURCE_FILES})
add_executable( ${BINARY_NAME} example.cpp)

# Require C++11
set_property(TARGET ${BINARY_NAME} PROPERTY CXX_STANDARD 11)
set_property(TARGET ${BINARY_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)

GSharp/include/CMakeLists.txt

set (GSharp_INCLUDE
  ${CMAKE_CURRENT_LIST_DIR}/gsharp.h
  ${CMAKE_CURRENT_LIST_DIR}/gsharp_extra.h
  PARENT_SCOPE)

GSharp/src/CMakeLists.txt

set (GSharp_SOURCE
  ${CMAKE_CURRENT_LIST_DIR}/gsharp.h
  ${CMAKE_CURRENT_LIST_DIR}/gsharp_extra.h
  ${CMAKE_CURRENT_LIST_DIR}/gsharp.cpp
  ${CMAKE_CURRENT_LIST_DIR}/gsharp_except.h
  ${CMAKE_CURRENT_LIST_DIR}/gsharp_parser.cpp
  ${CMAKE_CURRENT_LIST_DIR}/gsharp_program.cpp
  ${CMAKE_CURRENT_LIST_DIR}/gsharp_program.h
  ${CMAKE_CURRENT_LIST_DIR}/version.h
  PARENT_SCOPE)

To generate a Makefile and build:

cd ~/GSharp
mkdir build
cd build
cmake ..
make

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions