在C++应用程序的makefile中包含C文件?

p4tfgftt  于 2023-05-24  发布在  其他
关注(0)|答案(1)|浏览(161)

我试图包含一个C库,然后将其与我的C++应用程序沿着编译,但我无法使我的makefile正常工作:

SRC = main.cpp menu.cpp dialog_wnd.cpp player.cpp
C_SRC = miniaudio.c
CXX = g++ 
CXXFLAGS = -Wall $(shell fltk-config --cxxflags)

LFLAGS = $(shell fltk-config --ldflags)

OBJS = $(SRC:.cpp=.o) $(C_SRC:.c=.o)
DIR_OBJ = obj/
DIR_OBJS = $(addprefix $(DIR_OBJ), $(OBJS))

$(DIR_OBJ)%.o: %.cpp %.c *.h 
        $(CXX) $(CXXFLAGS) -c $(<) -o $(@)

EXE = myApplication

all: $(EXE)

$(EXE): $(DIR_OBJS)
        $(CXX) -o $@ $^ $(LFLAGS)

depend:
        makedepend -- $(CXXFLAGS) -- $(SRC) $(C_SRC)

strip: $(EXE)
        strip --strip-all $(EXE)

clean:
        rm -f $(DIR_OBJS)
        rm -f $(EXE)

我得到这个错误:
make:***没有规则来创建目标'obj/main. o','myApplication'需要。
我做错了什么?

m1m5dgzv

m1m5dgzv1#

$(DIR_OBJ)%.o: %.cpp %.c *.h使得每个目标文件都需要同时对应的.cpp.c文件。
我建议将其一分为二,这样也可以为C代码使用适当的编译器($(CC))。对于标志,使用CPPFLAGS作为您希望同时使用的选项,使用CFLAGS作为C编译器使用的标志。
示例:

CPPFLAGS = -Wall
CXXFLAGS = $(shell fltk-config --cxxflags)

$(DIR_OBJ)%.o: %.cpp *.h 
        $(CXX) $(CPPFLAGS) $(CXXFLAGS)-c $< -o $@

$(DIR_OBJ)%.o: %.c *.h 
        $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

注意:使每个目标文件依赖于每个头文件将需要在每次接触单个头文件时进行完全重建。

相关问题