12345678910111213141516171819202122 |
- Compiler=g++
- Compiler_flags=-pedantic-errors -Wall -Weffc++ -Wextra -Wsign-conversion
- Compiler_libs_flags=-lncurses
- Cpp_version=-std=c++20
- Include_dir=includes
- Src_dir=src
- Cpp_files=$(shell ls $(Src_dir) | grep \.cpp)
- Cpp_files_with_paths=$(wildcard $(Src_dir)/*.cpp )
- Cpp_files_in_subdirs_with_paths=$(wildcard $(Src_dir)/**/*.cpp ) # Find all cpp in dirs and subdirs ( src/menu/menu.cpp src/point/point.cpp ) список путей ко всем cpp-файлам в каталоге Src_dir и его подкаталогах.
- Include_dirs=$(wildcard $(Include_dir)/*) # Find all header dirs and subdirs ( includes/menu includes/point ) список путей ко всем каталогам, содержащим заголовочные файлы.
- # g++ src/main.cpp src/menu/menu.cpp src/point/point.cpp -o main -std=c++20 -pedantic-errors -Wall -Weffc++ -Wextra -Wsign-conversion -lncurses -Iincludes/menu -Iincludes/point; g++ src/menu.cpp src/menu/menu.cpp src/point/point.cpp -o menu -std=c++20 -pedantic-errors -Wall -Weffc++ -Wextra -Wsign-conversion -lncurses -Iincludes/menu -Iincludes/point;
- # Put all headers dirs in option -I for g++: $(foreach dir, $(Include_dirs), -I$(dir))
- # $^ = $(Cpp_files_in_subdirs_with_paths)
- ${Cpp_files}: $(Cpp_files_in_subdirs_with_paths) # говорит make, что все файлы перечисленные в Cpp_files ( src/main.cpp src/menu.cpp ) должны быть собраны с использованием файлов, указанных в $Cpp_files_in_subdirs_with_paths ( src/menu/menu.cpp src/point/point.cpp )
- $(foreach cpp_file, $(Cpp_files), $(Compiler) ${Src_dir}/$(cpp_file) $^ -o $(basename $(cpp_file)) $(Cpp_version) $(Compiler_flags) $(Compiler_libs_flags) $(foreach dir, $(Include_dirs), -I$(dir));)
- clean:
- $(foreach bin_file, $(basename $(Cpp_files)), rm -rvf ${bin_file};)
|