Skip to content

Commit dc03866

Browse files
committed
cmake: feat: Allow nesting of examples in ./examples/
1 parent 86c1a3a commit dc03866

3 files changed

Lines changed: 53 additions & 22 deletions

File tree

CMakeLists.txt

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -121,43 +121,48 @@ add_subdirectory (3rdparty/re2 EXCLUDE_FROM_ALL)
121121
add_subdirectory (3rdparty/simlib EXCLUDE_FROM_ALL)
122122
add_subdirectory (3rdparty/cudd EXCLUDE_FROM_ALL)
123123

124-
if (MATA_BUILD_EXAMPLES)
124+
if ((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) AND MATA_BUILD_EXAMPLES)
125+
message ("-- Building examples")
125126
add_subdirectory (examples)
126127
endif ()
127128

128129
# Build tests only if Mata is the main project and we enabled testing
129130
if ((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) AND BUILD_TESTING)
131+
message ("-- Building tests")
130132
add_subdirectory (tests)
131133
add_subdirectory (tests-integration)
132134
endif ()
133135

134136

135137
##### INSTALLING AND UNINSTALLING #####
136-
install (TARGETS libmata cudd_headers simlib_headers
137-
EXPORT mataTargets
138+
install (
139+
TARGETS libmata cudd_headers simlib_headers
140+
EXPORT mataTargets
138141
ARCHIVE DESTINATION lib
139142
)
140143
# TODO: should headers be installed in some nicer way? there is something called FILE_SET in cmake, but I do not feel it will make it better
141144
install(
142-
DIRECTORY
143-
${PROJECT_SOURCE_DIR}/include/
144-
${PROJECT_SOURCE_DIR}/3rdparty/cudd/include/ # TODO remove this after we remove PUBLIC dependency on CUDD
145-
${PROJECT_SOURCE_DIR}/3rdparty/simlib/include/ # TODO remove this after we remove PUBLIC dependency on simlib
146-
DESTINATION include
145+
DIRECTORY
146+
${PROJECT_SOURCE_DIR}/include/
147+
${PROJECT_SOURCE_DIR}/3rdparty/cudd/include/ # TODO remove this after we remove PUBLIC dependency on CUDD
148+
${PROJECT_SOURCE_DIR}/3rdparty/simlib/include/ # TODO remove this after we remove PUBLIC dependency on simlib
149+
DESTINATION include
147150
)
148-
install(EXPORT mataTargets
149-
# NAMESPACE mata:: # for modern cmake, commented out because I am not sure what could break with it
150-
DESTINATION lib/cmake/mata
151+
install(
152+
EXPORT mataTargets
153+
# NAMESPACE mata:: # for modern cmake, commented out because I am not sure what could break with it
154+
DESTINATION lib/cmake/mata
151155
)
152156

153157
include(CMakePackageConfigHelpers)
154-
configure_package_config_file(
155-
cmake/mataConfig.cmake.in # your template
156-
"${CMAKE_CURRENT_BINARY_DIR}/mataConfig.cmake" # output
157-
INSTALL_DESTINATION lib/cmake/mata
158+
configure_package_config_file(cmake/mataConfig.cmake.in
159+
"${CMAKE_CURRENT_BINARY_DIR}/mataConfig.cmake"
160+
INSTALL_DESTINATION lib/cmake/mata
161+
)
162+
install(
163+
FILES "${CMAKE_CURRENT_BINARY_DIR}/mataConfig.cmake"
164+
DESTINATION lib/cmake/mata
158165
)
159-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mataConfig.cmake"
160-
DESTINATION lib/cmake/mata)
161166

162167

163168
# Uninstall target from https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake

examples/CMakeLists.txt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
file(GLOB MATA_EXAMPLES "${CMAKE_CURRENT_SOURCE_DIR}/*.cc")
1+
file(GLOB_RECURSE MATA_EXAMPLES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cc")
22
foreach(MATA_EXAMPLE ${MATA_EXAMPLES})
3-
get_filename_component(MATA_EXAMPLE_NAME ${MATA_EXAMPLE} NAME_WE)
4-
add_executable(${MATA_EXAMPLE_NAME} ${MATA_EXAMPLE})
5-
target_link_libraries(${MATA_EXAMPLE_NAME} PRIVATE libmata)
6-
endforeach()
3+
file(RELATIVE_PATH MATA_EXAMPLE_REL "${CMAKE_CURRENT_SOURCE_DIR}" "${MATA_EXAMPLE}")
4+
string(REPLACE "/" "-" MATA_EXAMPLE_NAME "${MATA_EXAMPLE_REL}")
5+
string(REPLACE ".cc" "" MATA_EXAMPLE_NAME "${MATA_EXAMPLE_NAME}")
6+
add_executable(${MATA_EXAMPLE_NAME} ${MATA_EXAMPLE})
7+
target_link_libraries(${MATA_EXAMPLE_NAME} PRIVATE libmata)
8+
endforeach()

examples/Makefile

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Makefile wrapper for building/running selected MATA examples via CMake.
2+
3+
ROOT_DIR ?= ..
4+
BUILD_DIR ?= $(ROOT_DIR)/build
5+
CMAKE_BUILD_TYPE ?= Debug
6+
JOBS ?= 6
7+
8+
EXAMPLE ?= example01-simple
9+
10+
.PHONY: all configure build run clean
11+
12+
all: build
13+
14+
configure:
15+
cmake -S $(ROOT_DIR) -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
16+
17+
build: configure
18+
cmake --build $(BUILD_DIR) --parallel $(JOBS)
19+
20+
run: build
21+
$(BUILD_DIR)/examples/$(EXAMPLE)
22+
23+
clean:
24+
rm -f $(BUILD_DIR)/examples/$(EXAMPLE)

0 commit comments

Comments
 (0)