[英]Include C files in C++ makefile
我正在用 C++ 編碼,並且為此有一個完美的 makefile。 然后,出於項目目的,我不得不上網查找代碼來做我想做的事情。 原來的代碼可用混合 C 文件以及 C++ 文件。 當,現在嘗試編譯時,我遇到了架構 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
。 你會想以某種方式將它們分開,否則你只會得到關於沒有規則來制作其他目標的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.