Skip to content

Commit a76e649

Browse files
authored
Merge pull request #145 from RandomPrototypes/support_find_package
generate screen_capture_liteConfig.cmake so that we can use find_package()
2 parents 9d8bf3e + 32211a2 commit a76e649

8 files changed

+99
-41
lines changed

CMakeLists.txt

+34-10
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
cmake_minimum_required(VERSION 3.16)
2-
project(screen_capture_lite_build)
2+
project(screen_capture_lite_build VERSION 17.1)
33

44
set(CMAKE_CXX_STANDARD 17)
5+
#set(CMAKE_DEBUG_POSTFIX "d")
56
set(CMAKE_CXX_STANDARD_REQUIRED ON)
67
set(CMAKE_CXX_EXTENSIONS OFF)
78
option(BUILD_EXAMPLE "Build example" ON)
8-
set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Build shared libraries")
9+
option(BUILD_CSHARP "Build C#" ON)
10+
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
911
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
1012
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
1113

@@ -21,14 +23,34 @@ else()
2123
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic")
2224
endif()
2325

26+
if(${BUILD_SHARED_LIBS})
27+
set(TARGET_SUFFIX shared)
28+
else()
29+
set(TARGET_SUFFIX static)
30+
endif()
31+
32+
set(TARGET_NAME screen_capture_lite_${TARGET_SUFFIX})
33+
2434
add_subdirectory(src_cpp)
25-
add_subdirectory(src_csharp)
35+
if(${BUILD_CSHARP} AND ${BUILD_SHARED_LIBS})
36+
add_subdirectory(src_csharp)
37+
endif()
2638

27-
install (TARGETS screen_capture_lite_static screen_capture_lite_shared
28-
RUNTIME DESTINATION bin
29-
ARCHIVE DESTINATION lib
30-
LIBRARY DESTINATION lib
39+
install (TARGETS ${TARGET_NAME}
40+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
41+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
42+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
43+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
3144
)
45+
46+
configure_file(modules/${TARGET_NAME}Config.cmake.in ${TARGET_NAME}Config.cmake @ONLY)
47+
48+
#export(TARGETS ${TARGET_NAME} FILE ${TARGET_NAME}-config.cmake)
49+
#install(EXPORT ${TARGET_NAME}-config FILE ${TARGET_NAME}-config.cmake DESTINATION lib/cmake/screen_capture_lite)
50+
51+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}Config.cmake
52+
DESTINATION lib${LIB_SUFFIX}/cmake/screen_capture_lite)
53+
3254

3355
install (FILES
3456
include/ScreenCapture.h
@@ -45,11 +67,13 @@ if (NOT TARGET uninstall)
4567
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
4668
endif()
4769

48-
enable_testing()
70+
enable_testing()
4971

5072
if (${BUILD_EXAMPLE})
5173
add_subdirectory(Example_OpenGL)
5274
add_subdirectory(Example_CPP)
53-
add_subdirectory(Example_CSharp)
54-
add_subdirectory(Example_Unity)
75+
if(${BUILD_CSHARP} AND ${BUILD_SHARED_LIBS})
76+
add_subdirectory(Example_CSharp)
77+
add_subdirectory(Example_Unity)
78+
endif()
5579
endif()

Example_CPP/CMakeLists.txt

+12-14
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
project(screen_capture_example_cpp)
22

33
if(WIN32)
4-
set(${PROJECT_NAME}_PLATFORM_LIBS Dwmapi)
54
add_definitions(-DNOMINMAX)
6-
elseif(APPLE)
5+
endif()
6+
7+
if(NOT ${BUILD_SHARED_LIBS})
8+
if(WIN32)
9+
set(${PROJECT_NAME}_PLATFORM_LIBS Dwmapi)
10+
elseif(APPLE)
711
find_package(Threads REQUIRED)
812
find_library(corefoundation_lib CoreFoundation REQUIRED)
913
find_library(cocoa_lib Cocoa REQUIRED)
@@ -21,7 +25,7 @@ elseif(APPLE)
2125
${coregraphics_lib}
2226
${corevideo_lib}
2327
)
24-
else()
28+
else()
2529
find_package(X11 REQUIRED)
2630
if(!X11_XTest_FOUND)
2731
message(FATAL_ERROR "X11 extensions are required, but not found!")
@@ -37,26 +41,20 @@ else()
3741
${X11_Xinerama_LIB}
3842
${CMAKE_THREAD_LIBS_INIT}
3943
)
44+
endif()
4045
endif()
4146

4247
include_directories(
4348
../include
4449
)
4550

46-
add_executable(${PROJECT_NAME}_static
51+
add_executable(${PROJECT_NAME}_${TARGET_SUFFIX}
4752
lodepng.cpp
4853
Screen_Capture_Example.cpp
4954
)
50-
target_link_libraries(${PROJECT_NAME}_static screen_capture_lite_static ${${PROJECT_NAME}_PLATFORM_LIBS})
51-
52-
add_executable(${PROJECT_NAME}_shared
53-
lodepng.cpp
54-
Screen_Capture_Example.cpp
55-
)
56-
57-
target_link_libraries(${PROJECT_NAME}_shared screen_capture_lite_shared ${${PROJECT_NAME}_PLATFORM_LIBS})
55+
target_link_libraries(${PROJECT_NAME}_${TARGET_SUFFIX} screen_capture_lite_${TARGET_SUFFIX} ${${PROJECT_NAME}_PLATFORM_LIBS})
5856

59-
install (TARGETS ${PROJECT_NAME}_static ${PROJECT_NAME}_shared screen_capture_lite_shared
57+
install (TARGETS ${PROJECT_NAME}_${TARGET_SUFFIX} screen_capture_lite_${TARGET_SUFFIX}
6058
RUNTIME DESTINATION Examples
6159
)
62-
60+

Example_CSharp/CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ else()
1818
ENDIF()
1919
message(STATUS "Found dotnet executable CSHARP bindings will be generated!")
2020
add_custom_command(OUTPUT ${OUTPUT}
21-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:screen_capture_lite_shared> ${CMAKE_CURRENT_LIST_DIR}
22-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:screen_capture_lite_shared> ${CMAKE_BINARY_DIR}/Example_CSharp
21+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:screen_capture_lite_${TARGET_SUFFIX}> ${CMAKE_CURRENT_LIST_DIR}
22+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:screen_capture_lite_${TARGET_SUFFIX}> ${CMAKE_BINARY_DIR}/Example_CSharp
2323
COMMAND ${CMAKE_COMMAND} -E copy
2424
${CMAKE_CURRENT_LIST_DIR}/${CSPROJ}
2525
${CMAKE_BINARY_DIR}/Example_CSharp
@@ -39,11 +39,11 @@ install (FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb
3939
OPTIONAL
4040
)
4141

42-
install (TARGETS screen_capture_lite_shared
42+
install (TARGETS screen_capture_lite_${TARGET_SUFFIX}
4343
RUNTIME DESTINATION Examples
4444
)
4545

4646
endif()
4747

4848

49-
49+

Example_OpenGL/CMakeLists.txt

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
project(screen_capture_example_opengl_cpp)
22

33
if(WIN32)
4-
set(${PROJECT_NAME}_PLATFORM_LIBS Dwmapi)
54
add_definitions(-DNOMINMAX)
6-
elseif(APPLE)
5+
endif()
6+
7+
if(NOT ${BUILD_SHARED_LIBS})
8+
if(WIN32)
9+
set(${PROJECT_NAME}_PLATFORM_LIBS Dwmapi)
10+
elseif(APPLE)
711
find_package(Threads REQUIRED)
812
find_library(corefoundation_lib CoreFoundation REQUIRED)
913
find_library(cocoa_lib Cocoa REQUIRED)
@@ -21,7 +25,7 @@ elseif(APPLE)
2125
${coregraphics_lib}
2226
${corevideo_lib}
2327
)
24-
else()
28+
else()
2529
find_package(X11 REQUIRED)
2630
if(!X11_XTest_FOUND)
2731
message(FATAL_ERROR "X11 extensions are required, but not found!")
@@ -37,6 +41,7 @@ else()
3741
${X11_Xinerama_LIB}
3842
${CMAKE_THREAD_LIBS_INIT}
3943
)
44+
endif()
4045
endif()
4146

4247
include_directories(
@@ -50,8 +55,7 @@ set(GLAD_GL glfw/deps/glad/gl.h
5055

5156
option(GLFW_BUILD_EXAMPLES OFF)
5257
option(GLFW_BUILD_TESTS OFF)
53-
option(GLFW_BUILD_DOCS OFF)
54-
option(BUILD_SHARED_LIBS OFF)
58+
option(GLFW_BUILD_DOCS OFF)
5559
option(USE_MSVC_RUNTIME_LIBRARY_DLL OFF)
5660

5761
if (MSVC OR CMAKE_C_SIMULATE_ID STREQUAL "MSVC")
@@ -60,13 +64,13 @@ endif()
6064

6165
add_subdirectory(glfw)
6266

63-
add_executable(${PROJECT_NAME}_static
67+
add_executable(${PROJECT_NAME}_${TARGET_SUFFIX}
6468
Screen_Capture_Example_OpenGL.cpp
6569
${GLAD_GL}
6670
)
6771

68-
target_link_libraries(${PROJECT_NAME}_static screen_capture_lite_static ${${PROJECT_NAME}_PLATFORM_LIBS} glfw)
72+
target_link_libraries(${PROJECT_NAME}_${TARGET_SUFFIX} screen_capture_lite_${TARGET_SUFFIX} ${${PROJECT_NAME}_PLATFORM_LIBS} glfw)
6973

70-
install (TARGETS ${PROJECT_NAME}_static screen_capture_lite_static
74+
install (TARGETS ${PROJECT_NAME}_${TARGET_SUFFIX} screen_capture_lite_${TARGET_SUFFIX}
7175
RUNTIME DESTINATION Examples
7276
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
set(screen_capture_lite_shared_FOUND 1)
2+
3+
set(screen_capture_lite_shared_VERSION_COUNT 2)
4+
set(screen_capture_lite_shared_VERSION_MAJOR "@CMAKE_PROJECT_VERSION_MAJOR@")
5+
set(screen_capture_lite_shared_VERSION_MINOR "@CMAKE_PROJECT_VERSION_MINOR@")
6+
7+
set(screen_capture_lite_shared_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include")
8+
set(screen_capture_lite_shared_INCLUDE_DIRS ${screen_capture_lite_shared_INCLUDE_DIR})
9+
10+
set(screen_capture_lite_shared_LIBRARY_DIR "@CMAKE_INSTALL_PREFIX@/lib@LIB_SUFFIX@")
11+
12+
find_library(screen_capture_lite_shared_LIBRARY screen_capture_lite_shared HINTS ${screen_capture_lite_shared_LIBRARY_DIR})
13+
14+
set(screen_capture_lite_shared_LIBS ${screen_capture_lite_shared_LIBRARY})
15+
set(screen_capture_lite_shared_LIBRARIES ${screen_capture_lite_shared_LIBS})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
set(screen_capture_lite_static_FOUND 1)
2+
3+
set(screen_capture_lite_static_VERSION_COUNT 2)
4+
set(screen_capture_lite_static_VERSION_MAJOR "@CMAKE_PROJECT_VERSION_MAJOR@")
5+
set(screen_capture_lite_static_VERSION_MINOR "@CMAKE_PROJECT_VERSION_MINOR@")
6+
7+
set(screen_capture_lite_static_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include")
8+
set(screen_capture_lite_static_INCLUDE_DIRS ${screen_capture_lite_static_INCLUDE_DIR})
9+
10+
set(screen_capture_lite_static_LIBRARY_DIR "@CMAKE_INSTALL_PREFIX@/lib@LIB_SUFFIX@")
11+
12+
find_library(screen_capture_lite_static_LIBRARY screen_capture_lite_static HINTS ${screen_capture_lite_static_LIBRARY_DIR})
13+
14+
set(screen_capture_lite_static_LIBS ${screen_capture_lite_static_LIBRARY})
15+
set(screen_capture_lite_static_LIBRARIES ${screen_capture_lite_static_LIBS})

src_cpp/CMakeLists.txt

+5-4
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,10 @@ set(libsrc
7777
${SCREEN_CAPTURE_PLATFORM_SRC}
7878
)
7979

80-
message("Building STATIC Library")
81-
add_library(${PROJECT_NAME}_static STATIC ${libsrc})
82-
80+
if(NOT ${BUILD_SHARED_LIBS})
81+
message("Building STATIC Library")
82+
add_library(${PROJECT_NAME}_static STATIC ${libsrc})
83+
else()
8384
message("Building SHARED Library")
8485

8586
add_library(${PROJECT_NAME}_shared SHARED ${libsrc} ../include/ScreenCapture_C_API.h)
@@ -127,4 +128,4 @@ add_library(${PROJECT_NAME}_static STATIC ${libsrc})
127128
${CMAKE_THREAD_LIBS_INIT}
128129
)
129130
endif()
130-
131+
endif()

src_csharp/CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ else()
3737
)
3838

3939
add_custom_target(${PROJECT_NAME} ALL DEPENDS ${OUTPUT})
40-
add_dependencies(${PROJECT_NAME} screen_capture_lite_shared)
40+
add_dependencies(${PROJECT_NAME} screen_capture_lite_${TARGET_SUFFIX})
4141

4242
install (FILES ${CMAKE_BINARY_DIR}/${OUTPUT}
4343
DESTINATION bin
@@ -46,4 +46,5 @@ install (FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb
4646
DESTINATION bin
4747
OPTIONAL
4848
)
49+
4950
endif()

0 commit comments

Comments
 (0)