-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
38 lines (33 loc) · 1.42 KB
/
Copy pathCMakeLists.txt
File metadata and controls
38 lines (33 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
cmake_minimum_required(VERSION 3.16)
project(OOP)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# One exe per .cpp in DIR_PATH. TARGET_PREFIX scopes names across folders
# (e.g. Inheritance/basic.cpp → Inheritance_basic).
function(add_topic DIR_PATH TARGET_PREFIX)
file(GLOB CPP_FILES CONFIGURE_DEPENDS "${DIR_PATH}/*.cpp")
foreach(FILE ${CPP_FILES})
get_filename_component(STEM ${FILE} NAME_WE)
if(TARGET_PREFIX STREQUAL "")
set(TARGET_NAME "${STEM}")
else()
set(TARGET_NAME "${TARGET_PREFIX}_${STEM}")
endif()
add_executable(${TARGET_NAME} ${FILE})
endforeach()
endfunction()
# Root-level scratch files (no prefix)
add_topic(${CMAKE_SOURCE_DIR} "")
# Auto-discover every subdirectory — add/remove folders freely, never edit this file.
# CONFIGURE_DEPENDS re-triggers CMake when the directory listing changes.
file(GLOB _ENTRIES LIST_DIRECTORIES true CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/*")
foreach(_ENTRY ${_ENTRIES})
if(IS_DIRECTORY "${_ENTRY}")
get_filename_component(_DIRNAME "${_ENTRY}" NAME)
# Skip build output dirs and anything starting with . (hidden / IDE dirs)
if(NOT _DIRNAME MATCHES "^(cmake-build.*|build|out|CMakeFiles|\\..*)")
string(MAKE_C_IDENTIFIER "${_DIRNAME}" _PREFIX)
add_topic("${_ENTRY}" "${_PREFIX}")
endif()
endif()
endforeach()