1
1
# language: CMake
2
2
3
- # --------------------------------- Project setup ---------------------------------
4
- cmake_minimum_required (VERSION 3.20)
3
+ include (${REPO_FOLDER} /settings.cmake)
5
4
6
- get_filename_component ( PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME )
7
- project ( ${PROJECT_NAME} LANGUAGES CXX )
5
+ # Libraries
6
+ set (GLOBAL_LIBS shape_lib )
8
7
9
- # --------------------------------- Set C++ settings ---------------------------------
10
- set (CMAKE_CXX_STANDARD 23)
11
- set (CMAKE_CXX_STANDARD_REQUIRED ON )
12
- set (CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -std=c++23 -O2" )
8
+ # find_library(shape_lib ../)
9
+ add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /example_shape_lib/shape_lib)
13
10
14
- # less speed, more warnings = less potential errors in code
15
- # flags using source: https://codeforces.com/blog/entry/15547?locale=ru
16
- # set(CMAKE_CXX_FLAGS " -Wall -Wextra -pedantic -std=c++23 -O2 -Wfloat-equal -Wconversion -Wlogical-op -Wduplicated-cond")
11
+ # Add executable
12
+ file (GLOB_RECURSE SUBDIRS LIST_DIRECTORIES true "." )
17
13
18
- # --------------------------------- Set CMake settings ---------------------------------
19
- set (CMAKE_INCLUDE_CURRENT_DIR ON )
14
+ string (REPLACE ";" "|" PREFIX "${TASK_PREFIXES} " )
20
15
21
- # --------------------------------- Libraries --------------------------------
22
- add_subdirectory (example_shape_lib/shape_lib)
23
-
24
- # --------------------------------- Add executable --------------------------------
25
- file (GLOB_RECURSE SUBFOLDERS LIST_DIRECTORIES true "." )
26
-
27
- find_library (Lib ../)
28
-
29
- foreach (SUBDIR ${SUBFOLDERS} )
16
+ foreach (SUBDIR ${SUBDIRS} )
30
17
if (IS_DIRECTORY ${SUBDIR} )
31
- if ("${SUBDIR} " MATCHES "${PROJECT_NAME} /(task|example)_ [^/]*$" )
18
+ if ("${SUBDIR} " MATCHES "${PROJECT_NAME} /(${PREFIX} ) [^/]*$" )
32
19
get_filename_component (SUBPROJECT_NAME ${SUBDIR} NAME )
33
20
set (SUBPROJECT_NAME "${PROJECT_NAME} _${SUBPROJECT_NAME} " )
34
21
35
- # files only in one subfolder
36
- file (GLOB SUBPROJECT_SOURCES "${SUBDIR} /*.hpp" "${SUBDIR} /*.cpp" )
22
+ # (files only in one subfolder)
23
+ file (GLOB SUBPROJECT_SOURCES
24
+ ${SUBDIR} /${HEADERS_FORMAT}
25
+ ${SUBDIR} /${SOURCES_FORMAT}
26
+ )
27
+
28
+ set (SUBPROJECT_SOURCES)
29
+
30
+ foreach (ITEM_HEADER IN LISTS HEADERS_FORMAT)
31
+ file (GLOB ITEM_HEADER_FORMAT_SOURCES ${SUBDIR} /${ITEM_HEADER} )
32
+ list (APPEND SUBPROJECT_SOURCES ${ITEM_HEADER_FORMAT_SOURCES} )
33
+ endforeach ()
34
+
35
+ foreach (ITEM_SOURCE IN LISTS SOURCES_FORMAT)
36
+ file (GLOB ITEM_SOURCE_FORMAT_SOURCES ${SUBDIR} /${ITEM_SOURCE} )
37
+ list (APPEND SUBPROJECT_SOURCES ${ITEM_SOURCE_FORMAT_SOURCES} )
38
+ endforeach ()
37
39
38
40
add_executable (${SUBPROJECT_NAME} ${SUBPROJECT_SOURCES} )
39
41
40
- target_link_libraries (${SUBPROJECT_NAME} PRIVATE Lib)
42
+ target_link_libraries (${SUBPROJECT_NAME} PRIVATE ${LIB_NAME} ${GLOBAL_LIBS} )
43
+ target_include_directories (${SUBPROJECT_NAME} PRIVATE ${REPO_FOLDER} /${LIB_NAME} )
41
44
endif ()
42
45
endif ()
43
46
endforeach ()
44
47
45
- # --------------------------------- Copy extra files --------------------------------
46
- file (GLOB_RECURSE EXTRA_FILES "${CMAKE_CURRENT_SOURCE_DIR} /*" )
47
- file (GLOB_RECURSE PROJECT_FILES "*.cpp" "*.h" "*.hpp" "*.sh" "*.o*" "*.e*" "*.md" )
48
-
49
- list (REMOVE_ITEM EXTRA_FILES ${PROJECT_FILES} )
50
-
51
- file (COPY ${EXTRA_FILES} DESTINATION ${PROJECT_BINARY_DIR} )
52
-
53
- # --------------------------------- For this project --------------------------------
54
- find_library (shape_lib ../)
48
+ # For this project
49
+ CopyExtraFiles({})
55
50
56
- target_link_libraries ("${PROJECT_NAME} _example_shape_lib" PRIVATE shape_lib)
57
- target_include_directories ("${PROJECT_NAME} _example_shape_lib" PRIVATE example_shape_lib/shape_lib)
51
+ target_include_directories ("${PROJECT_NAME} _example_shape_lib" PRIVATE example_shape_lib/shape_lib)
0 commit comments