Я нашел два противоречивых ответа о том, как обращаться с общими включает ( один , два ), поэтому я решил описать мой случай ...
У меня есть небольшой проект, который изначально содержит 4 небольших приложения. Предположим, у меня есть файлы A. c, B. c, C. c и D. c. Чтобы улучшить состояние кода, я решил разделить общий исходный код. Я создал Common.h и Common. c. Каждое приложение теперь зависит от Common.o. Пожалуйста, проверьте ниже make-файл:
OBJ := $(OBJDIR)/A.o $(OBJDIR)/B.o $(OBJDIR)/C.o $(OBJDIR)/D.o
HEADERS := $(SRCDIR)/common.h
MODULES := $(BUILDDIR)/A $(BUILDDIR)/B $(BUILDDIR)/C $(BUILDDIR)/D
all: dir $(OBJ) $(MODULES)
dir :
mkdir -p $(BUILDDIR)
$(BUILDDIR)/A : $(OBJDIR)/A.o $(OBJDIR)/common.o
$(CC) $^ -o $@ $(CFLAGS)
$(BUILDDIR)/B : $(OBJDIR)/B.o $(OBJDIR)/common.o
$(CC) $^ -o $@ $(CFLAGS)
$(BUILDDIR)/C : $(OBJDIR)/C.o $(OBJDIR)/common.o
$(CC) $^ -o $@ $(CFLAGS)
$(BUILDDIR)/D : $(OBJDIR)/D.o $(OBJDIR)/common.o
$(CC) $^ -o $@ $(CFLAGS)
$(OBJDIR)/%.o : $(SRCDIR)/%.c $(HEADERS)
$(CC) -c $< -o $@ $(CFLAGS)
.PHONY: clean
clean:
rm -rf $(BUILDDIR)
В каждом файле *. c, который я имел включает: #include<stdio.h>, #include <stdlib.h>, #include <string.h>
Должен ли я хранить эти включения в каждом файле c отдельно? или это хорошая практика, чтобы выразить это в общем.
Мне кажется, что я могу держать эти заголовки в common.h, потому что каждое приложение зависит от common.o. Это правильный подход? stdlib.h, stdio.h и string.h необходимы в A. c, B. c, C. c, D. c и Common. c (декларации Common. h не требует никаких этих файлов), но помещать их в файл common.h и не включать их в каждый файл. c логично ... правильный ли этот подход?
резюме : если в каждом файле. c у меня есть mallo c (в общем. c тоже), могу ли я поместить #include <stdlib.h>
только в common.h и затем включить common.h во все файлы. c ?