CMake: Major cleanup to support find_package(raylib)

Remove that link_libraries_to_executable() hack and defines a proper
raylib target that can be used with target_link_libraries.

The same target is also available for external (user) code by using
find_package(raylib).

This results in:

- Remove hardcoded build directories from examples and games CMakeLists.txt
- Allow rlgl_standalone and other special examples to be built easily
- Allow CMake projects to find_package(raylib instead of fiddling with pkg-config
- Makes code a little more maintainable
- Fixes #471, #606.
- Makes code less confusing by removing the double use of PLATFORM (#584).

Note that this is still not _The Right Way_(TM), because normally
raylib-config.cmake (or its includes) would be automatically generated.
I didn't manage to get that to work though, so I went the easier route
of just wrapping pkg_check_modules for consumption by find_package.
This commit is contained in:
Ahmad Fatoum 2018-07-28 16:08:41 +02:00
parent 3e5093eab0
commit 3f09726331
No known key found for this signature in database
GPG key ID: C3EAC3DE9321D59B
17 changed files with 321 additions and 264 deletions

View file

@ -1,15 +1,6 @@
# Setup the project and settings
project(examples)
include("../cmake/utils.cmake")
# Make sure raylib has been built
# TODO `build` directory should maybe be something else...
# TODO place somewhere else?
include_directories("../build/release")
include_directories("../src/external")
include_directories("../src/external/glfw/include")
# Get the sources together
set(example_dirs audio core models others shaders shapes text textures)
set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=199309L)
@ -64,6 +55,9 @@ elseif(${PLATFORM} MATCHES "Web")
set(OUTPUT_EXT ".html")
endif()
if (NOT TARGET raylib)
find_package(raylib 2.0 REQUIRED)
endif()
# Do each example
foreach(example_source ${example_sources})
@ -75,7 +69,7 @@ foreach(example_source ${example_sources})
add_executable(${example_name} ${example_source})
# Link the libraries
link_libraries_to_executable(${example_name})
target_link_libraries(${example_name} raylib)
endforeach()
# Copy all of the resource files to the destination