Skip to content
This repository was archived by the owner on Jan 19, 2021. It is now read-only.

Commit c8e08a4

Browse files
authored
Merge pull request #7 from josephbirkner/feature/ninja-windows-build
Enable Windows build through EXPORT_ALL_SYMBOLS and optional static lib
2 parents bcc3c37 + f1c4665 commit c8e08a4

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

CMakeLists.txt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ SET(CPPGIT2_VERSION_MINOR 1)
2525
SET(CPPGIT2_VERSION_REV 0)
2626
SET(CPPGIT2_VERSION_STRING "${CPPGIT2_VERSION_MAJOR}.${CPPGIT2_VERSION_MINOR}.${CPPGIT2_VERSION_REV}")
2727

28+
# Build option for shared vs. static lib (Same option as for libgit2)
29+
OPTION(BUILD_SHARED_LIBS "Build Shared Library (OFF for Static)" ON)
30+
2831
# Build object library
2932
ADD_LIBRARY(CPPGIT2_OBJECT_LIBRARY OBJECT ${CPPGIT2_SOURCES})
3033
INCLUDE_DIRECTORIES("include" "${LIBGIT2_INCLUDEDIR}" "test")
@@ -33,19 +36,18 @@ SET_PROPERTY(TARGET CPPGIT2_OBJECT_LIBRARY PROPERTY CXX_STANDARD 11)
3336
# Shared libraries need PIC
3437
SET_PROPERTY(TARGET CPPGIT2_OBJECT_LIBRARY PROPERTY POSITION_INDEPENDENT_CODE 1)
3538

36-
# Build shared library
37-
add_library(CPPGIT2_SHARED SHARED $<TARGET_OBJECTS:CPPGIT2_OBJECT_LIBRARY>)
38-
SET_TARGET_PROPERTIES(CPPGIT2_SHARED PROPERTIES OUTPUT_NAME cppgit2)
39-
SET_TARGET_PROPERTIES(CPPGIT2_SHARED PROPERTIES VERSION ${CPPGIT2_VERSION_STRING}
40-
SOVERSION ${CPPGIT2_VERSION_MINOR})
41-
SET_TARGET_PROPERTIES(CPPGIT2_SHARED PROPERTIES CXX_STANDARD 11)
42-
TARGET_LINK_LIBRARIES(CPPGIT2_SHARED git2)
43-
44-
# Build static library
45-
add_library(CPPGIT2_STATIC STATIC $<TARGET_OBJECTS:CPPGIT2_OBJECT_LIBRARY>)
46-
SET_TARGET_PROPERTIES(CPPGIT2_STATIC PROPERTIES OUTPUT_NAME cppgit2)
47-
SET_TARGET_PROPERTIES(CPPGIT2_STATIC PROPERTIES CXX_STANDARD 11)
48-
TARGET_LINK_LIBRARIES(CPPGIT2_STATIC git2)
39+
# Build shared/static library
40+
if (BUILD_SHARED_LIBS)
41+
ADD_LIBRARY(cppgit2 SHARED $<TARGET_OBJECTS:CPPGIT2_OBJECT_LIBRARY>)
42+
SET_TARGET_PROPERTIES(cppgit2 PROPERTIES
43+
VERSION ${CPPGIT2_VERSION_STRING}
44+
SOVERSION ${CPPGIT2_VERSION_MINOR}
45+
WINDOWS_EXPORT_ALL_SYMBOLS ON)
46+
else ()
47+
ADD_LIBRARY(cppgit2 STATIC $<TARGET_OBJECTS:CPPGIT2_OBJECT_LIBRARY>)
48+
endif ()
49+
SET_TARGET_PROPERTIES(cppgit2 PROPERTIES CXX_STANDARD 11)
50+
TARGET_LINK_LIBRARIES(cppgit2 git2)
4951

5052
# Copy include directories to build/include
5153
FILE(COPY "include" DESTINATION "${CMAKE_BINARY_DIR}/.")
@@ -58,7 +60,7 @@ FOREACH(SAMPLE ${SAMPLES})
5860
GET_FILENAME_COMPONENT(SAMPLE_EXE ${SAMPLE} NAME_WE)
5961
ADD_EXECUTABLE(${SAMPLE_EXE} ${SAMPLE})
6062
SET_TARGET_PROPERTIES(${SAMPLE_EXE} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/samples")
61-
TARGET_LINK_LIBRARIES(${SAMPLE_EXE} CPPGIT2_SHARED)
63+
TARGET_LINK_LIBRARIES(${SAMPLE_EXE} cppgit2)
6264
SET_PROPERTY(TARGET ${SAMPLE_EXE} PROPERTY CXX_STANDARD 11)
6365
ENDFOREACH()
6466

@@ -69,5 +71,5 @@ SET_SOURCE_FILES_PROPERTIES(test/main.cpp
6971
COMPILE_DEFINITIONS DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN)
7072
ADD_EXECUTABLE(cppgit2_test ${TESTS})
7173
SET_TARGET_PROPERTIES(cppgit2_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/test")
72-
TARGET_LINK_LIBRARIES(cppgit2_test CPPGIT2_SHARED)
74+
TARGET_LINK_LIBRARIES(cppgit2_test cppgit2)
7375
SET_PROPERTY(TARGET cppgit2_test PROPERTY CXX_STANDARD 11)

0 commit comments

Comments
 (0)