diff --git a/CMakeLists.txt b/CMakeLists.txt index ef8878202..eeb2c7a7f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,8 +88,13 @@ set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) # additional paths via -D. list(APPEND CMAKE_MODULE_PATH "${Ceres_SOURCE_DIR}/cmake") include(AddCompileFlagsIfSupported) +include(CheckCXXCompilerFlag) +include(CheckLibraryExists) include(UpdateCacheVariable) +check_cxx_compiler_flag(/bigobj HAVE_BIGOBJ) +check_library_exists(m pow "" HAVE_LIBM) + # Xcode 11.0-1 with macOS 10.15 (Catalina) broke alignment. include(DetectBrokenStackCheckMacOSXcodePairing) detect_broken_stack_check_macos_xcode_pairing() @@ -617,7 +622,6 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Matches Clang & AppleClang. endif () # Older versions of Clang (<= 2.9) do not support the 'return-type-c-linkage' # option, so check for its presence before adding it to the default flags set. - include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-Wno-return-type-c-linkage" HAVE_RETURN_TYPE_C_LINKAGE) if (HAVE_RETURN_TYPE_C_LINKAGE) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 9959563d4..e102e31be 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,5 +1,5 @@ # Ceres Solver - A fast non-linear least squares minimizer -# Copyright 2015 Google Inc. All rights reserved. +# Copyright 2022 Google Inc. All rights reserved. # http://ceres-solver.org/ # # Redistribution and use in source and binary forms, with or without @@ -28,98 +28,90 @@ # # Author: keir@google.com (Keir Mierle) -# Only Ceres itself should be compiled with CERES_BUILDING_SHARED_LIBRARY -# defined, any users of Ceres will have CERES_USING_SHARED_LIBRARY defined -# for them in Ceres' config.h if appropriate. -if (BUILD_SHARED_LIBS) - remove_definitions(-DCERES_BUILDING_SHARED_LIBRARY) -endif() - add_executable(helloworld helloworld.cc) -target_link_libraries(helloworld Ceres::ceres) +target_link_libraries(helloworld PRIVATE Ceres::ceres) add_executable(helloworld_numeric_diff helloworld_numeric_diff.cc) -target_link_libraries(helloworld_numeric_diff Ceres::ceres) +target_link_libraries(helloworld_numeric_diff PRIVATE Ceres::ceres) add_executable(helloworld_analytic_diff helloworld_analytic_diff.cc) -target_link_libraries(helloworld_analytic_diff Ceres::ceres) +target_link_libraries(helloworld_analytic_diff PRIVATE Ceres::ceres) add_executable(curve_fitting curve_fitting.cc) -target_link_libraries(curve_fitting Ceres::ceres) +target_link_libraries(curve_fitting PRIVATE Ceres::ceres) add_executable(rosenbrock rosenbrock.cc) -target_link_libraries(rosenbrock Ceres::ceres) +target_link_libraries(rosenbrock PRIVATE Ceres::ceres) add_executable(rosenbrock_analytic_diff rosenbrock_analytic_diff.cc) -target_link_libraries(rosenbrock_analytic_diff Ceres::ceres) +target_link_libraries(rosenbrock_analytic_diff PRIVATE Ceres::ceres) add_executable(rosenbrock_numeric_diff rosenbrock_numeric_diff.cc) -target_link_libraries(rosenbrock_numeric_diff Ceres::ceres) +target_link_libraries(rosenbrock_numeric_diff PRIVATE Ceres::ceres) add_executable(curve_fitting_c curve_fitting.c) -target_link_libraries(curve_fitting_c Ceres::ceres) +target_link_libraries(curve_fitting_c PRIVATE Ceres::ceres) # Force CMake to link curve_fitting_c using the C linker. set_target_properties(curve_fitting_c PROPERTIES LINKER_LANGUAGE C) # As this is a C file #including we have to explicitly add the math # library (libm). Although some compilers (dependent upon options) will accept # the indirect link to libm via Ceres, at least GCC 4.8 on pure Debian won't. -if (NOT MSVC) - target_link_libraries(curve_fitting_c m) -endif (NOT MSVC) +if (HAVE_LIBM) + target_link_libraries(curve_fitting_c PRIVATE m) +endif (HAVE_LIBM) add_executable(ellipse_approximation ellipse_approximation.cc) -target_link_libraries(ellipse_approximation Ceres::ceres) +target_link_libraries(ellipse_approximation PRIVATE Ceres::ceres) add_executable(robust_curve_fitting robust_curve_fitting.cc) -target_link_libraries(robust_curve_fitting Ceres::ceres) +target_link_libraries(robust_curve_fitting PRIVATE Ceres::ceres) add_executable(simple_bundle_adjuster simple_bundle_adjuster.cc) -target_link_libraries(simple_bundle_adjuster Ceres::ceres) +target_link_libraries(simple_bundle_adjuster PRIVATE Ceres::ceres) add_executable(bicubic_interpolation bicubic_interpolation.cc) -target_link_libraries(bicubic_interpolation Ceres::ceres) +target_link_libraries(bicubic_interpolation PRIVATE Ceres::ceres) add_executable(bicubic_interpolation_analytic bicubic_interpolation_analytic.cc) -target_link_libraries(bicubic_interpolation_analytic Ceres::ceres) +target_link_libraries(bicubic_interpolation_analytic PRIVATE Ceres::ceres) if (GFLAGS) add_executable(powell powell.cc) - target_link_libraries(powell Ceres::ceres gflags) + target_link_libraries(powell PRIVATE Ceres::ceres gflags) add_executable(nist nist.cc) - target_link_libraries(nist Ceres::ceres gflags) - if (MSVC) - target_compile_options(nist PRIVATE "/bigobj") + target_link_libraries(nist PRIVATE Ceres::ceres gflags) + if (HAVE_BIGOBJ) + target_compile_options(nist PRIVATE /bigobj) endif() add_executable(more_garbow_hillstrom more_garbow_hillstrom.cc) - target_link_libraries(more_garbow_hillstrom Ceres::ceres gflags) + target_link_libraries(more_garbow_hillstrom PRIVATE Ceres::ceres gflags) add_executable(circle_fit circle_fit.cc) - target_link_libraries(circle_fit Ceres::ceres gflags) + target_link_libraries(circle_fit PRIVATE Ceres::ceres gflags) add_executable(bundle_adjuster bundle_adjuster.cc bal_problem.cc) - target_link_libraries(bundle_adjuster Ceres::ceres gflags) + target_link_libraries(bundle_adjuster PRIVATE Ceres::ceres gflags) add_executable(libmv_bundle_adjuster libmv_bundle_adjuster.cc) - target_link_libraries(libmv_bundle_adjuster Ceres::ceres gflags) + target_link_libraries(libmv_bundle_adjuster PRIVATE Ceres::ceres gflags) add_executable(libmv_homography libmv_homography.cc) - target_link_libraries(libmv_homography Ceres::ceres gflags) + target_link_libraries(libmv_homography PRIVATE Ceres::ceres gflags) add_executable(denoising denoising.cc fields_of_experts.cc) - target_link_libraries(denoising Ceres::ceres gflags) + target_link_libraries(denoising PRIVATE Ceres::ceres gflags) add_executable(robot_pose_mle robot_pose_mle.cc) - target_link_libraries(robot_pose_mle Ceres::ceres gflags) - + target_link_libraries(robot_pose_mle PRIVATE Ceres::ceres gflags) endif (GFLAGS) add_subdirectory(sampled_function) diff --git a/examples/sampled_function/CMakeLists.txt b/examples/sampled_function/CMakeLists.txt index 8a17cad0c..5d717e9f5 100644 --- a/examples/sampled_function/CMakeLists.txt +++ b/examples/sampled_function/CMakeLists.txt @@ -1,5 +1,5 @@ # Ceres Solver - A fast non-linear least squares minimizer -# Copyright 2015 Google Inc. All rights reserved. +# Copyright 2022 Google Inc. All rights reserved. # http://ceres-solver.org/ # # Redistribution and use in source and binary forms, with or without @@ -29,4 +29,4 @@ # Author: vitus@google.com (Michael Vitus) add_executable(sampled_function sampled_function.cc) -target_link_libraries(sampled_function Ceres::ceres) +target_link_libraries(sampled_function PRIVATE Ceres::ceres) diff --git a/examples/slam/pose_graph_2d/CMakeLists.txt b/examples/slam/pose_graph_2d/CMakeLists.txt index 8c006d5d1..a0b821776 100644 --- a/examples/slam/pose_graph_2d/CMakeLists.txt +++ b/examples/slam/pose_graph_2d/CMakeLists.txt @@ -1,5 +1,5 @@ # Ceres Solver - A fast non-linear least squares minimizer -# Copyright 2016 Google Inc. All rights reserved. +# Copyright 2022 Google Inc. All rights reserved. # http://ceres-solver.org/ # # Redistribution and use in source and binary forms, with or without @@ -35,5 +35,5 @@ if (GFLAGS) pose_graph_2d.cc pose_graph_2d_error_term.h types.h) - target_link_libraries(pose_graph_2d Ceres::ceres gflags) + target_link_libraries(pose_graph_2d PRIVATE Ceres::ceres gflags) endif (GFLAGS) diff --git a/examples/slam/pose_graph_3d/CMakeLists.txt b/examples/slam/pose_graph_3d/CMakeLists.txt index b6421cc8d..05194976b 100644 --- a/examples/slam/pose_graph_3d/CMakeLists.txt +++ b/examples/slam/pose_graph_3d/CMakeLists.txt @@ -1,5 +1,5 @@ # Ceres Solver - A fast non-linear least squares minimizer -# Copyright 2016 Google Inc. All rights reserved. +# Copyright 2022 Google Inc. All rights reserved. # http://ceres-solver.org/ # # Redistribution and use in source and binary forms, with or without @@ -30,5 +30,5 @@ if (GFLAGS) add_executable(pose_graph_3d pose_graph_3d.cc) - target_link_libraries(pose_graph_3d Ceres::ceres gflags) + target_link_libraries(pose_graph_3d PRIVATE Ceres::ceres gflags) endif (GFLAGS)