126 lines
3.1 KiB
CMake
126 lines
3.1 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
project(CeresWrapper VERSION 1.0.0 LANGUAGES CXX)
|
|
|
|
# Set C++ standard
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
# Build shared library
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
# Find required packages
|
|
find_package(Ceres REQUIRED)
|
|
find_package(Eigen3 REQUIRED)
|
|
|
|
# Include directories
|
|
include_directories(
|
|
${CERES_INCLUDE_DIRS}
|
|
${EIGEN3_INCLUDE_DIR}
|
|
)
|
|
|
|
# Source files
|
|
set(SOURCES
|
|
ceres_wrapper.cc
|
|
)
|
|
|
|
# Header files
|
|
set(HEADERS
|
|
ceres_wrapper.h
|
|
)
|
|
|
|
# Create shared library
|
|
add_library(ceres_wrapper SHARED ${SOURCES} ${HEADERS})
|
|
|
|
# Set library properties
|
|
set_target_properties(ceres_wrapper PROPERTIES
|
|
VERSION ${PROJECT_VERSION}
|
|
SOVERSION 1
|
|
PUBLIC_HEADER "${HEADERS}"
|
|
CXX_VISIBILITY_PRESET hidden
|
|
VISIBILITY_INLINES_HIDDEN ON
|
|
)
|
|
|
|
# Add compile definition for export macro
|
|
target_compile_definitions(ceres_wrapper PRIVATE CERES_WRAPPER_BUILDING)
|
|
|
|
# Link libraries
|
|
target_link_libraries(ceres_wrapper
|
|
PUBLIC
|
|
Ceres::ceres
|
|
Eigen3::Eigen
|
|
)
|
|
|
|
# Compiler-specific options
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
|
target_compile_options(ceres_wrapper PRIVATE
|
|
-Wall
|
|
-Wextra
|
|
-Wpedantic
|
|
-fvisibility=hidden
|
|
)
|
|
endif()
|
|
|
|
# Install rules
|
|
install(TARGETS ceres_wrapper
|
|
LIBRARY DESTINATION lib
|
|
ARCHIVE DESTINATION lib
|
|
PUBLIC_HEADER DESTINATION include/ceres_wrapper
|
|
)
|
|
|
|
# Install header
|
|
install(FILES ${HEADERS}
|
|
DESTINATION include/ceres_wrapper
|
|
)
|
|
|
|
# ============================================================================
|
|
# Test executable
|
|
# ============================================================================
|
|
|
|
option(BUILD_TESTS "Build test executable" ON)
|
|
|
|
if(BUILD_TESTS)
|
|
enable_language(C)
|
|
|
|
# Test source
|
|
add_executable(ceres_wrapper_test
|
|
ceres_wrapper_test.c
|
|
)
|
|
|
|
# Link test executable
|
|
target_link_libraries(ceres_wrapper_test
|
|
PRIVATE
|
|
ceres_wrapper
|
|
Ceres::ceres
|
|
)
|
|
|
|
# Include directories for test
|
|
target_include_directories(ceres_wrapper_test PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CERES_INCLUDE_DIRS}
|
|
)
|
|
|
|
# Add compile definition for Ceres include if needed
|
|
if(CERES_INCLUDE_DIRS)
|
|
target_compile_definitions(ceres_wrapper_test PRIVATE
|
|
CERES_INCLUDE_DIR="${CERES_INCLUDE_DIRS}"
|
|
)
|
|
endif()
|
|
|
|
# Add test to CTest
|
|
add_test(NAME CeresWrapperTest COMMAND ceres_wrapper_test)
|
|
|
|
message(STATUS " Tests: Enabled")
|
|
else()
|
|
message(STATUS " Tests: Disabled")
|
|
endif()
|
|
|
|
# Build configuration summary
|
|
message(STATUS "CeresWrapper Configuration:")
|
|
message(STATUS " Version: ${PROJECT_VERSION}")
|
|
message(STATUS " C++ Standard: ${CMAKE_CXX_STANDARD}")
|
|
message(STATUS " Ceres Include: ${CERES_INCLUDE_DIRS}")
|
|
message(STATUS " Eigen3 Include: ${EIGEN3_INCLUDE_DIR}")
|
|
message(STATUS " Build Type: ${CMAKE_BUILD_TYPE}")
|
|
message(STATUS " Install Prefix: ${CMAKE_INSTALL_PREFIX}")
|