Using macro for creating examples to remove cmake code copy/paste
parent
2ccb892167
commit
f283150eb4
|
@ -121,6 +121,69 @@ macro(gtsamAddTestsGlob groupName globPatterns excludedFiles linkLibraries)
|
|||
endif()
|
||||
endmacro()
|
||||
|
||||
# Macro for adding scripts - one executable per cpp file.
|
||||
# globPatterns: e.g. "*.cpp", or a list of globs and files, e.g. "A*.cpp;B*.cpp".
|
||||
# excludedFiles: list of files or globs to exclude, e.g. "testC*.cpp;testBroken.cpp".
|
||||
# linkLibraries: list of libraries to link to.
|
||||
# Usage example: gtsamAddScriptsGlob("*.cpp" "Broken.cpp" "gtsam;GeographicLib")
|
||||
macro(gtsamAddExamplesGlob globPatterns excludedFiles linkLibraries)
|
||||
# Get all script files
|
||||
file(GLOB script_files ${globPatterns})
|
||||
|
||||
# Remove excluded scripts from the list
|
||||
if(NOT "${excludedFiles}" STREQUAL "")
|
||||
file(GLOB excludedFilePaths ${excludedFiles})
|
||||
if("${excludedFilePaths}" STREQUAL "")
|
||||
message(WARNING "The script exclusion pattern '${excludedFiles}' did not match any files")
|
||||
else()
|
||||
list(REMOVE_ITEM script_files ${excludedFilePaths})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Separate into source files and headers (allows for adding headers to show up in
|
||||
# MSVC and Xcode projects).
|
||||
set(script_srcs "")
|
||||
set(script_headers "")
|
||||
foreach(script_file IN ITEMS ${script_files})
|
||||
get_filename_component(script_ext ${script_file} EXT)
|
||||
if(script_ext MATCHES "(h|H)")
|
||||
list(APPEND script_headers ${script_file})
|
||||
else()
|
||||
list(APPEND script_srcs ${script_file})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Don't put test files in folders in MSVC and Xcode because they're already grouped
|
||||
source_group("" FILES ${script_srcs} ${script_headers})
|
||||
|
||||
# Create executables
|
||||
foreach(script_src IN ITEMS ${script_srcs})
|
||||
# Get script base name
|
||||
get_filename_component(script_name ${script_src} NAME_WE)
|
||||
|
||||
# Add executable
|
||||
add_executable(${script_name} ${script_src} ${script_headers})
|
||||
target_link_libraries(${script_name} ${linkLibraries})
|
||||
|
||||
# Add target dependencies
|
||||
add_dependencies(examples ${script_name})
|
||||
if(NOT MSVC AND NOT XCODE_VERSION)
|
||||
add_custom_target(${script_name}.run ${EXECUTABLE_OUTPUT_PATH}${script_name})
|
||||
endif()
|
||||
|
||||
# Add TOPSRCDIR
|
||||
set_property(SOURCE ${script_src} APPEND PROPERTY COMPILE_DEFINITIONS "TOPSRCDIR=\"${PROJECT_SOURCE_DIR}\"")
|
||||
|
||||
if(NOT GTSAM_BUILD_EXAMPLES_ALWAYS)
|
||||
# Exclude from 'make all' and 'make install'
|
||||
set_target_properties(${target_name} PROPERTIES EXCLUDE_FROM_ALL ON)
|
||||
endif()
|
||||
|
||||
# Configure target folder (for MSVC and Xcode)
|
||||
set_property(TARGET ${script_name} PROPERTY FOLDER "Examples")
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
# Macro for adding categorized tests in a "tests" folder, with
|
||||
# optional exclusion of tests and convenience library linking options
|
||||
#
|
||||
|
|
|
@ -1,42 +1,8 @@
|
|||
if(NOT MSVC)
|
||||
add_custom_target(examples)
|
||||
endif()
|
||||
|
||||
# Build example executables
|
||||
FILE(GLOB example_srcs "*.cpp")
|
||||
|
||||
set (excluded_examples #"")
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/DiscreteBayesNet_FG.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/UGM_chain.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/UGM_small.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/elaboratePoint2KalmanFilter.cpp"
|
||||
set (excluded_examples
|
||||
DiscreteBayesNet_FG.cpp
|
||||
UGM_chain.cpp
|
||||
UGM_small.cpp
|
||||
elaboratePoint2KalmanFilter.cpp
|
||||
)
|
||||
|
||||
list(REMOVE_ITEM example_srcs ${excluded_examples})
|
||||
|
||||
foreach(example_src ${example_srcs} )
|
||||
get_filename_component(example_base ${example_src} NAME_WE)
|
||||
set( example_bin ${example_base} )
|
||||
message(STATUS "Adding Example ${example_bin}")
|
||||
if(NOT MSVC)
|
||||
add_dependencies(examples ${example_bin})
|
||||
endif()
|
||||
add_executable(${example_bin} ${example_src})
|
||||
|
||||
# Disable building during make all/install
|
||||
if (GTSAM_DISABLE_EXAMPLES_ON_INSTALL)
|
||||
set_target_properties(${example_bin} PROPERTIES EXCLUDE_FROM_ALL ON)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${example_bin} gtsam ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
||||
if(NOT MSVC AND NOT XCODE_VERSION)
|
||||
add_custom_target(${example_bin}.run ${EXECUTABLE_OUTPUT_PATH}${example_bin} ${ARGN})
|
||||
endif()
|
||||
|
||||
# Set up Visual Studio folder
|
||||
if(MSVC)
|
||||
set_property(TARGET ${example_bin} PROPERTY FOLDER "Examples")
|
||||
endif()
|
||||
|
||||
endforeach(example_src)
|
||||
|
||||
gtsamAddExamplesGlob("*.cpp" "${excluded_examples}" "gtsam;${Boost_PROGRAM_OPTIONS_LIBRARY}")
|
||||
|
|
|
@ -5,27 +5,5 @@ install(FILES ${discrete_headers} DESTINATION include/gtsam_unstable/discrete)
|
|||
# Add all tests
|
||||
add_subdirectory(tests)
|
||||
|
||||
# List examples to build - comment out here to exclude from compilation
|
||||
set(discrete_unstable_examples
|
||||
schedulingExample
|
||||
schedulingQuals12
|
||||
schedulingQuals13
|
||||
)
|
||||
|
||||
if (GTSAM_BUILD_EXAMPLES)
|
||||
foreach(example ${discrete_unstable_examples})
|
||||
add_executable(${example} "examples/${example}.cpp")
|
||||
|
||||
# Disable building during make all/install
|
||||
if (GTSAM_ENABLE_INSTALL_EXAMPLE_FIX)
|
||||
set_target_properties(${example} PROPERTIES EXCLUDE_FROM_ALL ON)
|
||||
endif()
|
||||
|
||||
if(NOT MSVC AND NOT XCODE_VERSION)
|
||||
add_dependencies(examples ${example})
|
||||
add_custom_target(${example}.run ${EXECUTABLE_OUTPUT_PATH}${example} ${ARGN})
|
||||
endif()
|
||||
|
||||
target_link_libraries(${example} gtsam gtsam_unstable)
|
||||
endforeach(example)
|
||||
endif (GTSAM_BUILD_EXAMPLES)
|
||||
# Add examples
|
||||
add_subdirectory(examples)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
set (excluded_examples
|
||||
# fileToExclude.cpp
|
||||
)
|
||||
|
||||
gtsamAddExamplesGlob("*.cpp" "${excluded_examples}" "gtsam_unstable")
|
|
@ -1,32 +1,5 @@
|
|||
if(NOT MSVC)
|
||||
add_custom_target(unstable_examples)
|
||||
endif()
|
||||
|
||||
# Build example executables
|
||||
FILE(GLOB example_srcs "*.cpp")
|
||||
foreach(example_src ${example_srcs} )
|
||||
get_filename_component(example_base ${example_src} NAME_WE)
|
||||
set( example_bin ${example_base} )
|
||||
message(STATUS "Adding Example ${example_bin}")
|
||||
if(NOT MSVC)
|
||||
add_dependencies(examples ${example_bin})
|
||||
endif()
|
||||
add_executable(${example_bin} ${example_src})
|
||||
|
||||
# Disable building during make all/install
|
||||
if (GTSAM_DISABLE_EXAMPLES_ON_INSTALL)
|
||||
set_target_properties(${example_bin} PROPERTIES EXCLUDE_FROM_ALL ON)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${example_bin} gtsam gtsam_unstable)
|
||||
if(NOT MSVC AND NOT XCODE_VERSION)
|
||||
add_custom_target(${example_bin}.run ${EXECUTABLE_OUTPUT_PATH}${example_bin} ${ARGN})
|
||||
endif()
|
||||
|
||||
# Set up Visual Studio folder
|
||||
if(MSVC)
|
||||
set_property(TARGET ${example_bin} PROPERTY FOLDER "Examples")
|
||||
endif()
|
||||
|
||||
endforeach(example_src)
|
||||
set (excluded_examples
|
||||
# fileToExclude.cpp
|
||||
)
|
||||
|
||||
gtsamAddExamplesGlob("*.cpp" "${excluded_examples}" "gtsam_unstable")
|
||||
|
|
Loading…
Reference in New Issue