Skip to content

Commit e658c49

Browse files
authored
[C++] [restsdk]Update CMakeLists.txt for seamless building on Windows and Linux (#6658)
* Update CMakeLists.txt for seamless building on Windows and Linux * Update CMakeLists.txt Missing the line ending * Indent if statements and use target specific directives * Change Client CMakeLists.txt to non Debug
1 parent ff68128 commit e658c49

File tree

3 files changed

+114
-50
lines changed

3 files changed

+114
-50
lines changed

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/cmake-lists.mustache

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,11 @@ cmake_minimum_required (VERSION 2.8)
1212

1313
#PROJECT's NAME
1414
project(CppRestOpenAPIClient)
15-
15+
set(CMAKE_VERBOSE_MAKEFILE ON)
16+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
1617

1718
# THE LOCATION OF OUTPUT BINARIES
1819
set(CMAKE_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/lib)
19-
set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_DIR})
20-
21-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
2220

2321
if(NOT CMAKE_BUILD_TYPE)
2422
set(CMAKE_BUILD_TYPE Release)
@@ -27,28 +25,52 @@ endif()
2725
# BUILD TYPE
2826
message("A ${CMAKE_BUILD_TYPE} build configuration is detected")
2927

30-
# Update require components as necessary
31-
#find_package(Boost 1.45.0 REQUIRED COMPONENTS ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_REGEX_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})
28+
if (UNIX)
29+
message(STATUS "Building client library for Linux/Unix")
3230

33-
# build and set path to cpp rest sdk
34-
set(CPPREST_ROOT ${PROJECT_SOURCE_DIR}/3rdParty/cpprest)
35-
set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
36-
set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
31+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wno-unused-variable")
32+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wno-unused-variable")
3733

38-
include_directories(${PROJECT_SOURCE_DIR} api model ${CPPREST_INCLUDE_DIR})
34+
find_package(cpprestsdk REQUIRED)
35+
find_package(Boost REQUIRED)
36+
else()
37+
message(STATUS "Building client library for Windows")
3938

39+
find_package(cpprestsdk REQUIRED)
40+
find_package(Boost REQUIRED)
41+
find_package(pthreads REQUIRED)
42+
endif()
4043

41-
# If using vcpkg, set include directories. Also comment out CPPREST section above since vcpkg will handle it.
42-
# To install required vcpkg packages execute:
43-
# > vcpkg install cpprestsdk cpprestsdk:x64-windows boost-uuid boost-uuid:x64-windows
44-
# set(VCPKG_ROOT "C:\\vcpkg\\installed\\x64-windows")
45-
# set(VCPKG_INCLUDE_DIR ${VCPKG_ROOT}/include)
46-
# set(VCPKG_LIBRARY_DIR ${VCPKG_ROOT}/lib)
47-
# include_directories(${PROJECT_SOURCE_DIR} api model ${VCPKG_INCLUDE_DIR})
44+
# Manually set the cpprestsdk paths when not using package manager
45+
#set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
46+
#set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
47+
#include_directories(${CPPREST_INCLUDE_DIR})
48+
#link_directories(${CPPREST_LIBRARY_DIR})
4849

4950
#SUPPORTING FILES
5051
set(SUPPORTING_FILES "ApiClient" "ApiConfiguration" "ApiException" "HttpContent" "IHttpBody" "JsonBody" "ModelBase" "MultipartFormData" "Object")
5152
#SOURCE FILES
5253
file(GLOB SOURCE_FILES "api/*" "model/*")
5354

5455
add_library(${PROJECT_NAME} ${SUPPORTING_FILES} ${SOURCE_FILES})
56+
57+
target_include_directories(
58+
${PROJECT_NAME} PRIVATE
59+
${Boost_INCLUDE_DIRS}
60+
${CMAKE_CURRENT_SOURCE_DIR}/model
61+
${CMAKE_CURRENT_SOURCE_DIR}/api
62+
)
63+
64+
target_link_directories(
65+
${PROJECT_NAME} PRIVATE
66+
${Boost_LIBRARY_DIRS}
67+
)
68+
69+
if (UNIX)
70+
target_link_libraries(${PROJECT_NAME} PRIVATE cpprest pthread ${Boost_LIBRARIES} crypto)
71+
else()
72+
target_link_libraries(${PROJECT_NAME} PRIVATE cpprestsdk::cpprest ${pthreads_LIBRARIES} ${Boost_LIBRARIES} bcrypt)
73+
endif()
74+
75+
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
76+
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)

samples/client/petstore/cpp-restsdk/CMakeLists.txt

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,54 @@ project(cpprest-petstore)
44
set(CMAKE_VERBOSE_MAKEFILE ON)
55
set(CMAKE_INCLUDE_CURRENT_DIR ON)
66

7+
if (UNIX)
8+
message(STATUS "Building for Linux/Unix")
79

8-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wno-unused-variable")
9-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -Wall -Wno-unused-variable")
10+
set(CMAKE_BUILD_TYPE Debug)
11+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wno-unused-variable -pg -g3")
12+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wno-unused-variable -pg -g3")
13+
14+
find_package(cpprestsdk REQUIRED)
15+
find_package(Boost REQUIRED)
16+
else()
17+
message(STATUS "Building for Windows")
18+
19+
find_package(cpprestsdk REQUIRED)
20+
find_package(Boost REQUIRED)
21+
find_package(pthreads REQUIRED)
22+
endif()
1023

11-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg -g3")
12-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg -g3")
13-
set(CMAKE_BUILD_TYPE Debug)
14-
set(CMAKE_PREFIX_PATH /usr/lib/x86_64-linux-gnu/cmake)
15-
find_package(cpprestsdk REQUIRED)
16-
find_package(Boost REQUIRED)
1724
add_subdirectory(client)
1825

1926
file(GLOB SRCS
2027
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
2128
)
22-
include_directories(
29+
30+
add_executable(${PROJECT_NAME} ${SRCS})
31+
add_dependencies(${PROJECT_NAME} CppRestOpenAPIClient )
32+
33+
target_include_directories(
34+
${PROJECT_NAME} PRIVATE
2335
${CMAKE_CURRENT_SOURCE_DIR}/client
2436
${CMAKE_CURRENT_SOURCE_DIR}/client/model
2537
${CMAKE_CURRENT_SOURCE_DIR}/client/api
38+
${Boost_INCLUDE_DIRS}
2639
)
2740

28-
link_directories(
41+
target_link_directories(
42+
${PROJECT_NAME} PRIVATE
2943
${Boost_LIBRARY_DIRS}
3044
)
31-
add_executable(${PROJECT_NAME} ${SRCS})
32-
add_dependencies(${PROJECT_NAME} CppRestOpenAPIClient )
33-
target_link_libraries(${PROJECT_NAME} CppRestOpenAPIClient cpprest pthread boost_system crypto)
45+
46+
if (UNIX)
47+
target_link_libraries(${PROJECT_NAME} PRIVATE CppRestOpenAPIClient cpprest pthread ${Boost_LIBRARIES} crypto)
48+
else()
49+
target_link_libraries(${PROJECT_NAME} PRIVATE CppRestOpenAPIClient cpprestsdk::cpprest ${pthreads_LIBRARIES} ${Boost_LIBRARIES} bcrypt)
50+
endif()
51+
3452
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
3553
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
3654

37-
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
55+
if (UNIX)
56+
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
57+
endif()

samples/client/petstore/cpp-restsdk/client/CMakeLists.txt

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,11 @@ cmake_minimum_required (VERSION 2.8)
1212

1313
#PROJECT's NAME
1414
project(CppRestOpenAPIClient)
15-
15+
set(CMAKE_VERBOSE_MAKEFILE ON)
16+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
1617

1718
# THE LOCATION OF OUTPUT BINARIES
1819
set(CMAKE_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/lib)
19-
set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_DIR})
20-
21-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
2220

2321
if(NOT CMAKE_BUILD_TYPE)
2422
set(CMAKE_BUILD_TYPE Release)
@@ -27,28 +25,52 @@ endif()
2725
# BUILD TYPE
2826
message("A ${CMAKE_BUILD_TYPE} build configuration is detected")
2927

30-
# Update require components as necessary
31-
#find_package(Boost 1.45.0 REQUIRED COMPONENTS ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_REGEX_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})
28+
if (UNIX)
29+
message(STATUS "Building client library for Linux/Unix")
3230

33-
# build and set path to cpp rest sdk
34-
set(CPPREST_ROOT ${PROJECT_SOURCE_DIR}/3rdParty/cpprest)
35-
set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
36-
set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
31+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wno-unused-variable")
32+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wno-unused-variable")
3733

38-
include_directories(${PROJECT_SOURCE_DIR} api model ${CPPREST_INCLUDE_DIR})
34+
find_package(cpprestsdk REQUIRED)
35+
find_package(Boost REQUIRED)
36+
else()
37+
message(STATUS "Building client library for Windows")
3938

39+
find_package(cpprestsdk REQUIRED)
40+
find_package(Boost REQUIRED)
41+
find_package(pthreads REQUIRED)
42+
endif()
4043

41-
# If using vcpkg, set include directories. Also comment out CPPREST section above since vcpkg will handle it.
42-
# To install required vcpkg packages execute:
43-
# > vcpkg install cpprestsdk cpprestsdk:x64-windows boost-uuid boost-uuid:x64-windows
44-
# set(VCPKG_ROOT "C:\\vcpkg\\installed\\x64-windows")
45-
# set(VCPKG_INCLUDE_DIR ${VCPKG_ROOT}/include)
46-
# set(VCPKG_LIBRARY_DIR ${VCPKG_ROOT}/lib)
47-
# include_directories(${PROJECT_SOURCE_DIR} api model ${VCPKG_INCLUDE_DIR})
44+
# Manually set the cpprestsdk paths when not using package manager
45+
#set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
46+
#set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
47+
#include_directories(${CPPREST_INCLUDE_DIR})
48+
#link_directories(${CPPREST_LIBRARY_DIR})
4849

4950
#SUPPORTING FILES
5051
set(SUPPORTING_FILES "ApiClient" "ApiConfiguration" "ApiException" "HttpContent" "IHttpBody" "JsonBody" "ModelBase" "MultipartFormData" "Object")
5152
#SOURCE FILES
5253
file(GLOB SOURCE_FILES "api/*" "model/*")
5354

5455
add_library(${PROJECT_NAME} ${SUPPORTING_FILES} ${SOURCE_FILES})
56+
57+
target_include_directories(
58+
${PROJECT_NAME} PRIVATE
59+
${Boost_INCLUDE_DIRS}
60+
${CMAKE_CURRENT_SOURCE_DIR}/model
61+
${CMAKE_CURRENT_SOURCE_DIR}/api
62+
)
63+
64+
target_link_directories(
65+
${PROJECT_NAME} PRIVATE
66+
${Boost_LIBRARY_DIRS}
67+
)
68+
69+
if (UNIX)
70+
target_link_libraries(${PROJECT_NAME} PRIVATE cpprest pthread ${Boost_LIBRARIES} crypto)
71+
else()
72+
target_link_libraries(${PROJECT_NAME} PRIVATE cpprestsdk::cpprest ${pthreads_LIBRARIES} ${Boost_LIBRARIES} bcrypt)
73+
endif()
74+
75+
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
76+
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)

0 commit comments

Comments
 (0)