gpt4 book ai didi

c++ - 在 C++ makefile 中包含 C 文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:47 25 4
gpt4 key购买 nike

我正在用 C++ 编写代码,并且有一个完美运行的 makefile。然后,出于项目目的,我不得不上网查找代码来完成我想做的事情。原来可用的代码混合了 C 文件和 C++ 文件。什么时候,现在尝试编译我有这个 Undefined symbols for architecture x86_64 错误。我很确定这是因为我没有正确调整我的 makefile。我一直在努力寻找答案,但对我没有任何帮助。可能如果有人看一下这个 makefile,我猜会更容易。我还注意到没有一个 .o 文件是为我的 .c 文件制作的,但它们是为 .cpp 制作的

希望有人能帮忙。我坚持了3天

##### Configurable options:

# ---------------------------------------------------------------------
# Compiler section
# ---------------------------------------------------------------------

## Compiler:
CC=gcc
#CC=cc
CPP=g++

## Compiler flags:

# GCC: (also -march=pentium etc, for machine-dependent optimizing)
CFLAGS=-Wall -O3 -fomit-frame-pointer -funroll-loops
LDFLAGS=-L/usr/local/lib
LIBS=-lopenbabel
CPPFLAGS=$(CFLAGS) -I Project/Lib/openbabel-2.0/ -I ProjectCode/Include/ -I ProjectCode/Lib/boost_1_60_0/
CXXFLAGS=-Wall -g -std=c++11 -I.

# GCC w/ debugging:
#CFLAGS=-Wall -g -DINLINE

# Compaq C / Digital C:
#CFLAGS=-arch=host -fast

# SunOS:
#CFLAGS=-fast

## Program options:

# Enable long options for cl (eg. "cl --help"), comment out to disable.
# Requires getopt_long(3) (a GNU extension)
LONGOPTS = -DENABLE_LONG_OPTIONS


# ---------------------------------------------------------------------
# Directories section
# ---------------------------------------------------------------------


OBJFILES = ProjectCode/Objects/Project.o ProjectCode/Objects/stdafx.o ProjectCode/Objects/BoxTools.o ProjectCode/Objects/TanimotoStruct.o
COBJFILES = ProjectCode/Objects/cliquer.o ProjectCode/Objects/graph.o ProjectCode/Objects/reorder.o

EXEC = Project



# ---------------------------------------------------------------------
# Compilation section
# ---------------------------------------------------------------------

ProjectCode/Objects/%.o: ProjectCode/Source/%.c
$(CC) -o $@ -c $< $(CFLAGS) $(LIBS)
ProjectCode/Objects/%.o: ProjectCode/Source/%.cpp
$(CPP) $(CPPFLAGS) -o $@ -c $<
Project: $(OBJFILES)
$(CPP) $(LDFLAGS) -o $@ $^ $(CXXFLAGS) $(LIBS);


# ---------------------------------------------------------------------
# Cleaning section
# ---------------------------------------------------------------------

clean:
rm -f ProjectCode/Objects/*.o $(EXEC)

最佳答案

您只是对 C 对象文件没有任何依赖性。您需要添加它们。 CPP 有这个:

Project: $(OBJFILES)
$(CPP) $(LDFLAGS) -o $@ $^ $(CXXFLAGS) $(LIBS);

但它可能应该是这样的:

Project: $(OBJFILES) $(COBJFILES)
$(CPP) $(LDFLAGS) -o $@ $^ $(CXXFLAGS) $(LIBS);

目前,您的每个 %.o 文件都依赖于 %.cpp%.c。你会想以某种方式将它们分开,否则你只会得到关于没有规则来制作其他目标的错误。

关于c++ - 在 C++ makefile 中包含 C 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35940682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com