我的 Makefile 有问题。
我正在尝试从 2 个文件创建程序 - 包含主函数的 main.cpp 和包含在 main() 中调用的函数定义的 modules.c。 modules.c 只包含函数定义,没有主函数。
我的Makefile如下:
CC := gcc
CXX := g++
LINK := g++ -Wall
CFLAGS := -g
CXXFLAGS := -g
TARGET = program
$(TARGET): modules.o main.o
$(LINK) -o $@ $< -lpcap
clean:
rm *.o $(TARGET)
modules.o:
$(CC) $(CFLAGS) -c modules.c -o $@ $<
main.o:
$(CXX) $(CXXFLAGS) -c main.cpp -o $@ $<
我在 main.cpp 中包含了“modules.h”,其中包含所有函数声明。 CFLAGS 和 CXXFLAGS 变量指向包含
的正确路径当我尝试使用这个 Makefile 时,出现错误
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../lib64/crt1.o: In function '_start':
(.text+0x20): undefined reference to 'main'
如果我在我的 $(TARGET) 行中切换 modules.o 和 main.o 的顺序,那么我会收到错误消息,指出“ undefined reference ”我在 modules.c 和 main.cpp 中定义的函数。
不知道怎么回事
谢谢。
问候, 雷恩
最佳答案
使用 $^ 而不是 $<。后者仅包含第一个依赖项 (modules.o),因此 main.o 未链接到可执行文件中。
关于c++ - crt1.o函数_start中未定义对 'main'错误的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5646457/