簡體   English   中英

在 C++ 生成文件中包含 C 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM