ابزار کاربر

ابزار سایت


c-programming:makefile:example

تفاوت‌ها

تفاوت دو نسخهٔ متفاوت از صفحه را مشاهده می‌کنید.

پیوند به صفحه‌ی تفاوت‌ها

نگارش بعد
نگارش قبل
c-programming:makefile:example [2024/04/20 01:30] – ایجاد شد nasserc-programming:makefile:example [2024/04/20 01:34] (فعلی) nasser
خط 1: خط 1:
-====== Example ======+====== Examples ======
  
 <code make> <code make>
 +#Source: https://learning.edx.org/course/course-v1:Dartmouth_IMTx+DART.IMT.C.07+1T2020/home
 +
  
 # define the C compiler to use # define the C compiler to use
خط 41: خط 43:
 launch: program launch: program
  ./program  ./program
 +
 +</code>
 +
 +<code make>
 +# Thanks to Job Vranish (https://spin.atomicobject.com/2016/08/26/makefile-c-projects/)
 +TARGET_EXEC := final_program
 +
 +BUILD_DIR := ./build
 +SRC_DIRS := ./src
 +
 +# Find all the C and C++ files we want to compile
 +# Note the single quotes around the * expressions. The shell will incorrectly expand these otherwise, but we want to send the * directly to the find command.
 +SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s')
 +
 +# Prepends BUILD_DIR and appends .o to every src file
 +# As an example, ./your_dir/hello.cpp turns into ./build/./your_dir/hello.cpp.o
 +OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
 +
 +# String substitution (suffix version without %).
 +# As an example, ./build/hello.cpp.o turns into ./build/hello.cpp.d
 +DEPS := $(OBJS:.o=.d)
 +
 +# Every folder in ./src will need to be passed to GCC so that it can find header files
 +INC_DIRS := $(shell find $(SRC_DIRS) -type d)
 +# Add a prefix to INC_DIRS. So moduleA would become -ImoduleA. GCC understands this -I flag
 +INC_FLAGS := $(addprefix -I,$(INC_DIRS))
 +
 +# The -MMD and -MP flags together generate Makefiles for us!
 +# These files will have .d instead of .o as the output.
 +CPPFLAGS := $(INC_FLAGS) -MMD -MP
 +
 +# The final build step.
 +$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
 + $(CXX) $(OBJS) -o $@ $(LDFLAGS)
 +
 +# Build step for C source
 +$(BUILD_DIR)/%.c.o: %.c
 + mkdir -p $(dir $@)
 + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
 +
 +# Build step for C++ source
 +$(BUILD_DIR)/%.cpp.o: %.cpp
 + mkdir -p $(dir $@)
 + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
 +
 +
 +.PHONY: clean
 +clean:
 + rm -r $(BUILD_DIR)
 +
 +# Include the .d makefiles. The - at the front suppresses the errors of missing
 +# Makefiles. Initially, all the .d files will be missing, and we don't want those
 +# errors to show up.
 +-include $(DEPS)
 </code> </code>
c-programming/makefile/example.1713564018.txt.gz · آخرین ویرایش: 2024/04/20 01:30 توسط nasser

به جز مواردی که ذکر می‌شود، مابقی محتویات ویکی تحت مجوز زیر می‌باشند: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki