[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
This commit is contained in:
sunn 2020-06-15 09:08:35 +02:00 committed by GitHub
parent ff68128c15
commit e658c49f77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 114 additions and 50 deletions

View File

@ -12,13 +12,11 @@ cmake_minimum_required (VERSION 2.8)
#PROJECT's NAME #PROJECT's NAME
project(CppRestOpenAPIClient) project(CppRestOpenAPIClient)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# THE LOCATION OF OUTPUT BINARIES # THE LOCATION OF OUTPUT BINARIES
set(CMAKE_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/lib) set(CMAKE_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/lib)
set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_DIR})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release) set(CMAKE_BUILD_TYPE Release)
@ -27,24 +25,27 @@ endif()
# BUILD TYPE # BUILD TYPE
message("A ${CMAKE_BUILD_TYPE} build configuration is detected") message("A ${CMAKE_BUILD_TYPE} build configuration is detected")
# Update require components as necessary if (UNIX)
#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}) message(STATUS "Building client library for Linux/Unix")
# build and set path to cpp rest sdk set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wno-unused-variable")
set(CPPREST_ROOT ${PROJECT_SOURCE_DIR}/3rdParty/cpprest) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wno-unused-variable")
set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
include_directories(${PROJECT_SOURCE_DIR} api model ${CPPREST_INCLUDE_DIR}) find_package(cpprestsdk REQUIRED)
find_package(Boost REQUIRED)
else()
message(STATUS "Building client library for Windows")
find_package(cpprestsdk REQUIRED)
find_package(Boost REQUIRED)
find_package(pthreads REQUIRED)
endif()
# If using vcpkg, set include directories. Also comment out CPPREST section above since vcpkg will handle it. # Manually set the cpprestsdk paths when not using package manager
# To install required vcpkg packages execute: #set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
# > vcpkg install cpprestsdk cpprestsdk:x64-windows boost-uuid boost-uuid:x64-windows #set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
# set(VCPKG_ROOT "C:\\vcpkg\\installed\\x64-windows") #include_directories(${CPPREST_INCLUDE_DIR})
# set(VCPKG_INCLUDE_DIR ${VCPKG_ROOT}/include) #link_directories(${CPPREST_LIBRARY_DIR})
# set(VCPKG_LIBRARY_DIR ${VCPKG_ROOT}/lib)
# include_directories(${PROJECT_SOURCE_DIR} api model ${VCPKG_INCLUDE_DIR})
#SUPPORTING FILES #SUPPORTING FILES
set(SUPPORTING_FILES "ApiClient" "ApiConfiguration" "ApiException" "HttpContent" "IHttpBody" "JsonBody" "ModelBase" "MultipartFormData" "Object") set(SUPPORTING_FILES "ApiClient" "ApiConfiguration" "ApiException" "HttpContent" "IHttpBody" "JsonBody" "ModelBase" "MultipartFormData" "Object")
@ -52,3 +53,24 @@ set(SUPPORTING_FILES "ApiClient" "ApiConfiguration" "ApiException" "HttpContent
file(GLOB SOURCE_FILES "api/*" "model/*") file(GLOB SOURCE_FILES "api/*" "model/*")
add_library(${PROJECT_NAME} ${SUPPORTING_FILES} ${SOURCE_FILES}) add_library(${PROJECT_NAME} ${SUPPORTING_FILES} ${SOURCE_FILES})
target_include_directories(
${PROJECT_NAME} PRIVATE
${Boost_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/model
${CMAKE_CURRENT_SOURCE_DIR}/api
)
target_link_directories(
${PROJECT_NAME} PRIVATE
${Boost_LIBRARY_DIRS}
)
if (UNIX)
target_link_libraries(${PROJECT_NAME} PRIVATE cpprest pthread ${Boost_LIBRARIES} crypto)
else()
target_link_libraries(${PROJECT_NAME} PRIVATE cpprestsdk::cpprest ${pthreads_LIBRARIES} ${Boost_LIBRARIES} bcrypt)
endif()
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)

View File

@ -4,34 +4,54 @@ project(cpprest-petstore)
set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
if (UNIX)
message(STATUS "Building for Linux/Unix")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wno-unused-variable") set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -Wall -Wno-unused-variable") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wno-unused-variable -pg -g3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wno-unused-variable -pg -g3")
find_package(cpprestsdk REQUIRED)
find_package(Boost REQUIRED)
else()
message(STATUS "Building for Windows")
find_package(cpprestsdk REQUIRED)
find_package(Boost REQUIRED)
find_package(pthreads REQUIRED)
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg -g3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg -g3")
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_PREFIX_PATH /usr/lib/x86_64-linux-gnu/cmake)
find_package(cpprestsdk REQUIRED)
find_package(Boost REQUIRED)
add_subdirectory(client) add_subdirectory(client)
file(GLOB SRCS file(GLOB SRCS
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
) )
include_directories(
add_executable(${PROJECT_NAME} ${SRCS})
add_dependencies(${PROJECT_NAME} CppRestOpenAPIClient )
target_include_directories(
${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/client ${CMAKE_CURRENT_SOURCE_DIR}/client
${CMAKE_CURRENT_SOURCE_DIR}/client/model ${CMAKE_CURRENT_SOURCE_DIR}/client/model
${CMAKE_CURRENT_SOURCE_DIR}/client/api ${CMAKE_CURRENT_SOURCE_DIR}/client/api
${Boost_INCLUDE_DIRS}
) )
link_directories( target_link_directories(
${PROJECT_NAME} PRIVATE
${Boost_LIBRARY_DIRS} ${Boost_LIBRARY_DIRS}
) )
add_executable(${PROJECT_NAME} ${SRCS})
add_dependencies(${PROJECT_NAME} CppRestOpenAPIClient ) if (UNIX)
target_link_libraries(${PROJECT_NAME} CppRestOpenAPIClient cpprest pthread boost_system crypto) target_link_libraries(${PROJECT_NAME} PRIVATE CppRestOpenAPIClient cpprest pthread ${Boost_LIBRARIES} crypto)
else()
target_link_libraries(${PROJECT_NAME} PRIVATE CppRestOpenAPIClient cpprestsdk::cpprest ${pthreads_LIBRARIES} ${Boost_LIBRARIES} bcrypt)
endif()
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) if (UNIX)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
endif()

View File

@ -12,13 +12,11 @@ cmake_minimum_required (VERSION 2.8)
#PROJECT's NAME #PROJECT's NAME
project(CppRestOpenAPIClient) project(CppRestOpenAPIClient)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# THE LOCATION OF OUTPUT BINARIES # THE LOCATION OF OUTPUT BINARIES
set(CMAKE_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/lib) set(CMAKE_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/lib)
set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_DIR})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release) set(CMAKE_BUILD_TYPE Release)
@ -27,24 +25,27 @@ endif()
# BUILD TYPE # BUILD TYPE
message("A ${CMAKE_BUILD_TYPE} build configuration is detected") message("A ${CMAKE_BUILD_TYPE} build configuration is detected")
# Update require components as necessary if (UNIX)
#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}) message(STATUS "Building client library for Linux/Unix")
# build and set path to cpp rest sdk set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -Wno-unused-variable")
set(CPPREST_ROOT ${PROJECT_SOURCE_DIR}/3rdParty/cpprest) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wno-unused-variable")
set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
include_directories(${PROJECT_SOURCE_DIR} api model ${CPPREST_INCLUDE_DIR}) find_package(cpprestsdk REQUIRED)
find_package(Boost REQUIRED)
else()
message(STATUS "Building client library for Windows")
find_package(cpprestsdk REQUIRED)
find_package(Boost REQUIRED)
find_package(pthreads REQUIRED)
endif()
# If using vcpkg, set include directories. Also comment out CPPREST section above since vcpkg will handle it. # Manually set the cpprestsdk paths when not using package manager
# To install required vcpkg packages execute: #set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
# > vcpkg install cpprestsdk cpprestsdk:x64-windows boost-uuid boost-uuid:x64-windows #set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
# set(VCPKG_ROOT "C:\\vcpkg\\installed\\x64-windows") #include_directories(${CPPREST_INCLUDE_DIR})
# set(VCPKG_INCLUDE_DIR ${VCPKG_ROOT}/include) #link_directories(${CPPREST_LIBRARY_DIR})
# set(VCPKG_LIBRARY_DIR ${VCPKG_ROOT}/lib)
# include_directories(${PROJECT_SOURCE_DIR} api model ${VCPKG_INCLUDE_DIR})
#SUPPORTING FILES #SUPPORTING FILES
set(SUPPORTING_FILES "ApiClient" "ApiConfiguration" "ApiException" "HttpContent" "IHttpBody" "JsonBody" "ModelBase" "MultipartFormData" "Object") set(SUPPORTING_FILES "ApiClient" "ApiConfiguration" "ApiException" "HttpContent" "IHttpBody" "JsonBody" "ModelBase" "MultipartFormData" "Object")
@ -52,3 +53,24 @@ set(SUPPORTING_FILES "ApiClient" "ApiConfiguration" "ApiException" "HttpContent
file(GLOB SOURCE_FILES "api/*" "model/*") file(GLOB SOURCE_FILES "api/*" "model/*")
add_library(${PROJECT_NAME} ${SUPPORTING_FILES} ${SOURCE_FILES}) add_library(${PROJECT_NAME} ${SUPPORTING_FILES} ${SOURCE_FILES})
target_include_directories(
${PROJECT_NAME} PRIVATE
${Boost_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/model
${CMAKE_CURRENT_SOURCE_DIR}/api
)
target_link_directories(
${PROJECT_NAME} PRIVATE
${Boost_LIBRARY_DIRS}
)
if (UNIX)
target_link_libraries(${PROJECT_NAME} PRIVATE cpprest pthread ${Boost_LIBRARIES} crypto)
else()
target_link_libraries(${PROJECT_NAME} PRIVATE cpprestsdk::cpprest ${pthreads_LIBRARIES} ${Boost_LIBRARIES} bcrypt)
endif()
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)