C++ 与c++;生成文件

C++ 与c++;生成文件,c++,makefile,hyperlink,C++,Makefile,Hyperlink,生成文件: INCLUDE = -I/usr/X11R6/include/ LIBDIR = -L/usr/X11R6/lib COMPILERFLAGS = -Wall CC = g++ CFLAGS = $(COMPILERFLAGS) $(INCLUDE) LIBRARIES = -lX11 -lXi -lXmu -lglut -lGL -lGLU -lm All: project project: main.o landscape.o point.o $(CC) $(CF

生成文件:

INCLUDE = -I/usr/X11R6/include/
LIBDIR  = -L/usr/X11R6/lib

COMPILERFLAGS = -Wall
CC = g++
CFLAGS = $(COMPILERFLAGS) $(INCLUDE)
LIBRARIES = -lX11 -lXi -lXmu -lglut -lGL -lGLU -lm

All: project

project: main.o landscape.o point.o
    $(CC) $(CFLAGS) -o $@ $(LIBDIR) $< $(LIBRARIES)

clean:
    rm *.o
INCLUDE=-I/usr/X11R6/INCLUDE/
LIBDIR=-L/usr/X11R6/lib
COMPILERFLAGS=-Wall
CC=g++
CFLAGS=$(编译器LAGS)$(包括)
库=-lX11-lXi-lXmu-lglut-lGL-lGLU-lm
全部:项目
项目:main.o景观.o点.o
$(CC)$(CFLAGS)-o$@$(LIBDIR)$<$(库)
清洁:
rm*.o
我有一个scanner.cpp、scanner.h、point.cpp、point.h和main.cpp文件 我将“point.h”包含在main.cpp文件中,我得到:

g++-Wall-I/usr/X11R6/include/-o项目-L/usr/X11R6/lib main.cpp-lX11-lXi-lXmu-lglut-lGL-lGLU-lm /tmp/ccdpJ8HH.o:在函数
main'中:
main.cpp:(.text+0x1c0):对点的未定义引用::点(int,int)'
collect2:错误:ld返回了1个退出状态
Makefile:15:目标“项目”的配方失败

make:**[project]错误1

项目:main.o scanner.o point.o
$(CC)$(CFLAGS)-o$@$(LIBDIR)$<$(库)


在这里,您需要链接所有.o文件。这里的规则将只使用main.o文件。因为
$
项目:main.o scanner.o point.o
$(CC)$(CFLAGS)-o$@$(LIBDIR)$<$(库)


在这里,您需要链接所有.o文件。这里的规则将只使用main.o文件。因为
$我建议您使用更完整的Makefile

也可以使用<代码> CXX+G++< /C>和<代码> CXXFLAGG/<代码>代替<代码> cc和<代码> cFLAGs<代码>,因为您正在编译C++和<代码>使有特殊的变量。 下面是一个我可以使用的Makefile示例

# Project name
NAME=       project

# Include directory
INC_DIR=    /usr/X11R6/include/

# Library directory
LIB_DIR=    /usr/X11R6/lib/

# Compiler
CXX=        g++

# Source files
SRC_DIR=    # in case your cpp files are in a folder like src/

SRC_FILES=  main.c      \
            landscape.c \
            point.c

# Obj files
OBJ=        $($(addprefix $(SRC_DIR), $(SRC_FILES)):.c=.o)
# that rule is composed of two steps
#  addprefix, which add the content of SRC_DIR in front of every
#  word of SRC_FILES
#  And a second rule which change every ".c" extension into ".o"

LIBS=       X11 \
            Xi  \
            Xmu \
            glut    \
            GL  \
            GLU \
            m

# Compilation flags
CXXFLAGS=   -Wall

CXXFLAGS+=  $(addprefix -I, $(INC_DIR))

LDFLAGS=    $(addprefix -L, $(LIB_DIR)) \
            $(addprefix -l, $(LIBS))

# Rules

# this rule is only linking, no CFLAGS required
$(NAME):    $(OBJ) # this force the Makefile to create the .o files
        $(CXX) -o $(NAME) $(OBJ) $(LDFLAGS)

All:    $(NAME)

# Remove all obj files
clean:
        rm -f $(OBJ)

# Remove all obj files and the binary
fclean: clean
        rm -f $(NAME)

# Remove all and recompile
re: fclean all

# Rule to compile every .c file into .o
%.o:    %.c
        $(CXX) -o $@ -c $< $(CFLAGS)

# Describe all the rules who do not directly create a file
.PHONY: All clean fclean re
#项目名称
名称=项目
#包含目录
INC_DIR=/usr/X11R6/include/
#图书馆目录
LIB_DIR=/usr/X11R6/LIB/
#编译程序
CXX=g++
#源文件
SRC_DIR=#如果您的cpp文件位于类似SRC的文件夹中/
SRC_FILES=main.c\
景观\
c点
#Obj文件
OBJ=$($(addprefix$(SRC_DIR),$(SRC_文件)):.c=.o)
#该规则由两个步骤组成
#addprefix,它将SRC_DIR的内容添加到每个
#SRC_文件的单词
#还有第二条规则,将每个“.c”扩展名改为“.o”
LIBS=X11\
席
Xmu\
过剩\
德国劳埃德船级社\
谷氨酸\
M
#编译标志
CXXFLAGS=-Wall
CXXFLAGS+=$(addprefix-I,$(INC_DIR))
LDFLAGS=$(addprefix-L,$(LIB_DIR))\
$(addprefix-l,$(LIBS))
#规则
#此规则仅用于链接,不需要CFLAGS
$(名称):$(OBJ)#这将强制Makefile创建.o文件
$(CXX)-o$(名称)$(OBJ)$(LDFLAGS)
全部:$(名称)
#删除所有obj文件
清洁:
rm-f$(OBJ)
#删除所有obj文件和二进制文件
清洁:清洁
rm-f$(名称)
#删除所有文件并重新编译
回复:fclean all
#将每个.c文件编译为.o的规则
%.o:%.c
$(CXX)-o$@-c$<$(CFLAGS)
#描述所有不直接创建文件的规则
.冒牌货:都是干净的
我不确定它是否完美,但它更好。 另外,不要忘记将项目规则放在
All
规则之前,以避免在简单调用
make
时重新链接

这样,您还可以添加漂亮的消息(例如在
%.o:%.c
规则中)


因此,您只需执行
make re
,即可完全更新二进制文件。

我建议您使用更完整的make文件

也可以使用<代码> CXX+G++< /C>和<代码> CXXFLAGG/<代码>代替<代码> cc和<代码> cFLAGs<代码>,因为您正在编译C++和<代码>使有特殊的变量。 下面是一个我可以使用的Makefile示例

# Project name
NAME=       project

# Include directory
INC_DIR=    /usr/X11R6/include/

# Library directory
LIB_DIR=    /usr/X11R6/lib/

# Compiler
CXX=        g++

# Source files
SRC_DIR=    # in case your cpp files are in a folder like src/

SRC_FILES=  main.c      \
            landscape.c \
            point.c

# Obj files
OBJ=        $($(addprefix $(SRC_DIR), $(SRC_FILES)):.c=.o)
# that rule is composed of two steps
#  addprefix, which add the content of SRC_DIR in front of every
#  word of SRC_FILES
#  And a second rule which change every ".c" extension into ".o"

LIBS=       X11 \
            Xi  \
            Xmu \
            glut    \
            GL  \
            GLU \
            m

# Compilation flags
CXXFLAGS=   -Wall

CXXFLAGS+=  $(addprefix -I, $(INC_DIR))

LDFLAGS=    $(addprefix -L, $(LIB_DIR)) \
            $(addprefix -l, $(LIBS))

# Rules

# this rule is only linking, no CFLAGS required
$(NAME):    $(OBJ) # this force the Makefile to create the .o files
        $(CXX) -o $(NAME) $(OBJ) $(LDFLAGS)

All:    $(NAME)

# Remove all obj files
clean:
        rm -f $(OBJ)

# Remove all obj files and the binary
fclean: clean
        rm -f $(NAME)

# Remove all and recompile
re: fclean all

# Rule to compile every .c file into .o
%.o:    %.c
        $(CXX) -o $@ -c $< $(CFLAGS)

# Describe all the rules who do not directly create a file
.PHONY: All clean fclean re
#项目名称
名称=项目
#包含目录
INC_DIR=/usr/X11R6/include/
#图书馆目录
LIB_DIR=/usr/X11R6/LIB/
#编译程序
CXX=g++
#源文件
SRC_DIR=#如果您的cpp文件位于类似SRC的文件夹中/
SRC_FILES=main.c\
景观\
c点
#Obj文件
OBJ=$($(addprefix$(SRC_DIR),$(SRC_文件)):.c=.o)
#该规则由两个步骤组成
#addprefix,它将SRC_DIR的内容添加到每个
#SRC_文件的单词
#还有第二条规则,将每个“.c”扩展名改为“.o”
LIBS=X11\
席
Xmu\
过剩\
德国劳埃德船级社\
谷氨酸\
M
#编译标志
CXXFLAGS=-Wall
CXXFLAGS+=$(addprefix-I,$(INC_DIR))
LDFLAGS=$(addprefix-L,$(LIB_DIR))\
$(addprefix-l,$(LIBS))
#规则
#此规则仅用于链接,不需要CFLAGS
$(名称):$(OBJ)#这将强制Makefile创建.o文件
$(CXX)-o$(名称)$(OBJ)$(LDFLAGS)
全部:$(名称)
#删除所有obj文件
清洁:
rm-f$(OBJ)
#删除所有obj文件和二进制文件
清洁:清洁
rm-f$(名称)
#删除所有文件并重新编译
回复:fclean all
#将每个.c文件编译为.o的规则
%.o:%.c
$(CXX)-o$@-c$<$(CFLAGS)
#描述所有不直接创建文件的规则
.冒牌货:都是干净的
我不确定它是否完美,但它更好。 另外,不要忘记将项目规则放在
All
规则之前,以避免在简单调用
make
时重新链接

这样,您还可以添加漂亮的消息(例如在
%.o:%.c
规则中)


因此,您只需执行
make re
即可完全更新二进制文件。

您需要将对象文件提供给生成可执行文件的行。@BoBTFish我不知道这意味着什么抱歉。您需要将对象文件提供给生成可执行文件的行。@BoBTFish我不知道这意味着什么抱歉。