Newer
Older
cmake_minimum_required(VERSION 3.5.1)
project(PlatoonProtocol)
set(PlatoonProtocol_VERSION_MAJOR 0)
set(PlatoonProtocol_VERSION_MINOR 1)
set(CMAKE_CXX_STANDARD 14)
# configure a header file to pass some of the CMake settings
# to the source code
configure_file(
"${PROJECT_SOURCE_DIR}/src/PlatoonProtocolLibConfig.h.in"
"${PROJECT_BINARY_DIR}/PlatoonProtocolLibConfig.h")
# so we can import the config header file
include_directories("${PROJECT_BINARY_DIR}")
# compiler flags
set(CMAKE_CXX_FLAGS -pthread)
#######################################
# PlatoonPlatoonProtocol Library Target
#######################################
set(SOURCE_FILES
include/PlatoonProtocolLib/Protocol.h
include/PlatoonProtocolLib/Vehicle.h
include/PlatoonProtocolLib/FollowerVehicle.h
include/PlatoonProtocolLib/LeaderVehicle.h
include/PlatoonProtocolLib/Utils.h
include/PlatoonProtocolLib/PlatoonMessage.h
include/PlatoonProtocolLib/json.hpp
src/LeaderVehicle.cpp
src/FollowerVehicle.cpp
src/Vehicle.cpp
target_link_libraries(PlatoonProtocolLib NetworkingLib)
set(PUBLIC_HEADER_FILES
include/PlatoonProtocolLib/FollowerVehicle.h
include/PlatoonProtocolLib/json.hpp
include/PlatoonProtocolLib/LeaderVehicle.h
include/PlatoonProtocolLib/PlatoonMessage.h
include/PlatoonProtocolLib/Protocol.h
include/PlatoonProtocolLib/Utils.h
include/PlatoonProtocolLib/Vehicle.h
${CMAKE_CURRENT_BINARY_DIR}/PlatoonProtocolLibConfig.h)
foreach(HEADER ${PUBLIC_HEADER_FILES})
set(PUBLIC_HEADER_FILES_COMBINED "${PUBLIC_HEADER_FILES_COMBINED}\\;${HEADER}")
endforeach()
# Specify public header files
set_target_properties(PlatoonProtocolLib PROPERTIES PUBLIC_HEADER ${PUBLIC_HEADER_FILES_COMBINED})
set(LOCAL_INSTALL_DIR ${CMAKE_CURRENT_LIST_DIR}/../../install)
set(CMAKE_PREFIX_PATH "${LOCAL_INSTALL_DIR}")
find_package(NetworkingLib REQUIRED)
target_include_directories(PlatoonProtocolLib PUBLIC ${NetworkingLib_INCLUDE_DIRS})
target_link_libraries(PlatoonProtocolLib NetworkingLib)
set(INSTALL_PACKAGE ON)
if(${INSTALL_PACKAGE})
#############################
# Specify install directories
#############################
set(INSTALL_LIB_DIR lib/PlatoonProtocolLib)
set(INSTALL_INCLUDE_DIR include/PlatoonProtocolLib)
set(INSTALL_CMAKE_DIR lib/PlatoonProtocolLib/CMake)
# Make relative paths absolute (needed later on)
foreach(p LIB INCLUDE CMAKE)
set(var INSTALL_${p}_DIR)
if(NOT IS_ABSOLUTE "${${var}}")
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif()
endforeach()
####################################################
# Create the *Config.cmake and *ConfigVersion files
####################################################
# Get the relative path from the cmake install directory to the include install directory
file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}" "${INSTALL_INCLUDE_DIR}")
# Configure *Config.cmake.in for the install tree
# Put it inside the cmake-files directory (which is located inside the binary directory)
set(CONF_INCLUDE_DIRS "\${PLATOON_PROTOCOL_LIB_CMAKE_DIR}/${REL_INCLUDE_DIR}/..")
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
configure_file(PlatoonProtocolLibConfig.cmake.in
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PlatoonProtocolLibConfig.cmake"
@ONLY)
# Configure *ConfigVersion.cmake.in for both build and install tree
# Put it inside the binary directory
configure_file(PlatoonProtocolLibConfigVersion.cmake.in
"${PROJECT_BINARY_DIR}/PlatoonProtocolLibConfigVersion.cmake" @ONLY)
########################
# Install PlatoonProtocolLib
########################
# Install library and header files
install(TARGETS PlatoonProtocolLib
EXPORT PlatoonProtocolLibTargets
LIBRARY DESTINATION "${INSTALL_LIB_DIR}"
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
RUNTIME DESTINATION "${INSTALL_LIB_DIR}" # for windows
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}")
# Install the PlatoonProtocolLibConfig.cmake and PlatoonProtocolLibConfigVersion.cmake
install(FILES
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PlatoonProtocolLibConfig.cmake"
"${PROJECT_BINARY_DIR}/PlatoonProtocolLibConfigVersion.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}")
# Install the export set for use with the install-tree
install(EXPORT PlatoonProtocolLibTargets
DESTINATION "${INSTALL_CMAKE_DIR}")
endif()
#######
# Test
#######
add_executable(LeaderTest ${SOURCE_FILES} test/LeaderTest.cpp)
target_link_libraries(LeaderTest NetworkingLib)
target_include_directories(LeaderTest PUBLIC ${NetworkingLib_INCLUDE_DIRS})
add_executable(FollowerTest ${SOURCE_FILES} test/FollowerTest.cpp)
target_link_libraries(FollowerTest NetworkingLib)
target_include_directories(FollowerTest PUBLIC ${NetworkingLib_INCLUDE_DIRS})
#add_executable(TestScenarios ${SOURCE_FILES} test/TestScenarios.cpp)
#target_link_libraries(TestScenarios NetworkingLib)
#target_include_directories(TestScenarios PUBLIC ${NetworkingLib_INCLUDE_DIRS})
# For debugging
#target_compile_options(LeaderTest PUBLIC -fopenmp -fPIC -O0 -g3 -ggdb)