Skip to content

Instantly share code, notes, and snippets.

@antonxo
Created December 19, 2019 07:17
Show Gist options
  • Save antonxo/81edaf47bbf19717078a2b0168820a8d to your computer and use it in GitHub Desktop.
Save antonxo/81edaf47bbf19717078a2b0168820a8d to your computer and use it in GitHub Desktop.
CMakeLists.txt example (compiles libraries on the go)
cmake_minimum_required(VERSION 3.6)
project(RT)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wextra -DUNITY_INCLUDE_CONFIG_H")
# project sources
set(PARSER_SOURCES
inc/rt_prsr.h
src/parser/rt_prsr_peek.c
src/parser/rt_prsr_node.c
src/parser/rt_prsr_parse.c
src/parser/rt_prsr_alias.c
src/parser/rt_prsr_scalar.c
src/parser/rt_prsr_expect.c
src/parser/rt_prsr_anchor.c
src/parser/rt_prsr_create.c
src/parser/rt_prsr_mapping.c
src/parser/rt_prsr_helpers.c
src/parser/rt_prsr_destroy.c
src/parser/rt_prsr_document.c
src/parser/rt_prsr_sequence.c
src/parser/rt_prsr_set_file.c)
set(CONSTRUCTOR_SOURCES
inc/rt_ctor.h
src/constructor/rt_ctor_init.c
src/constructor/rt_ctor_disks.c
src/constructor/rt_ctor_cones.c
src/constructor/rt_ctor_camera.c
src/constructor/rt_ctor_planes.c
src/constructor/rt_ctor_helpers.c
src/constructor/rt_ctor_spheres.c
src/constructor/rt_ctor_destruct.c
src/constructor/rt_ctor_cylinders.c
src/constructor/rt_ctor_materials.c
src/constructor/rt_ctor_lim_cones.c
src/constructor/rt_ctor_primitives.c
src/constructor/rt_ctor_construct.c
src/constructor/rt_ctor_point_lights.c
src/constructor/rt_ctor_lim_cylinders.c
src/constructor/rt_ctor_ambient_light.c
src/constructor/rt_ctor_background_color.c)
set(CORE_SOURCES
src/camera_move.c
src/camera_rotate.c
src/find.c
src/evaluate_found.c
src/colors.c
src/shadow.c
src/intersection1.c
src/intersection2.c
src/intersection3.c
src/intersection_support1.c
src/intersection_support2.c
src/camera_rotate.c
src/rays.c
src/reflection_refraction.c
src/process_ray_dielectric.c
src/rendering.c
src/handlers.c
src/stack.c)
set(NET_SOURCES)
set(SOURCE_FILES
inc/rt.h
src/main.c)
set(SOURCE_FILES ${SOURCE_FILES} ${PARSER_SOURCES})
set(SOURCE_FILES ${SOURCE_FILES} ${CONSTRUCTOR_SOURCES})
set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES})
set(SOURCE_FILES ${SOURCE_FILES} ${NET_SOURCES})
# libft sources
AUX_SOURCE_DIRECTORY(lib/libft LIBFT_SOURCE_FILES)
AUX_SOURCE_DIRECTORY(lib/libft/includes LIBFT_SOURCE_FILES)
# mathx sources
AUX_SOURCE_DIRECTORY(./lib/math_extended/ MATHX_SOURCES)
# tests sources
set(TEST_SOURCE_FILES)
AUX_SOURCE_DIRECTORY(t TEST_SOURCE_FILES)
AUX_SOURCE_DIRECTORY(lib/unity/src TEST_SOURCE_FILES)
AUX_SOURCE_DIRECTORY(lib/unity/extras/fixture/src TEST_SOURCE_FILES)
set(TEST_SOURCE_FILES ${TEST_SOURCE_FILES} ${PARSER_SOURCES})
set(TEST_SOURCE_FILES ${TEST_SOURCE_FILES} ${CONSTRUCTOR_SOURCES})
set(TEST_SOURCE_FILES ${TEST_SOURCE_FILES} ${CORE_SOURCES})
set(TEST_SOURCE_FILES ${TEST_SOURCE_FILES} ${NET_SOURCES})
# SDL2 constants
if (APPLE)
find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2 REQUIRED sdl2)
pkg_check_modules(SDL2_TTF REQUIRED sdl2_ttf)
elseif(UNIX AND NOT APPLE)
find_package(SDL2 REQUIRED)
find_package(SDL_ttf REQUIRED)
endif ()
include_directories(
inc
lib/libft/includes
lib/math_extended
${SDL2_INCLUDE_DIRS}
${SDL2_TTF_INCLUDE_DIRS}
lib/unity/src/
lib/unity/extras/fixture/src
lib/libyaml/build/include) # where to find headers
link_directories(lib/libyaml/build/lib)
add_library(mathx STATIC ${MATHX_SOURCES})
add_library(ft STATIC ${LIBFT_SOURCE_FILES}) # build static libft.a lib
add_executable(RT ${SOURCE_FILES}) # compilation
add_executable(RT_TEST ${TEST_SOURCE_FILES}) # compilation of test executable
if (APPLE)
target_link_libraries(RT ${SDL2_LDFLAGS} ${SDL2_TTF_LDFLAGS} ft mathx m pthread yaml) # linkage of main executable
target_link_libraries(RT_TEST ${SDL2_LDFLAGS} ${SDL2_TTF_LDFLAGS} ft mathx m pthread yaml) # linkage of test executable
elseif(UNIX AND NOT APPLE)
target_link_libraries(RT ${SDL2_LIBRARIES} ft mathx m pthread yaml SDL2_ttf) # linkage of main executable
target_link_libraries(RT_TEST ${SDL2_LIBRARIES} ft mathx m pthread yaml SDL2_ttf) # linkage of test executable
endif ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment