如何在没有main的情况下编译头文件及其运行文件

时间:2011-03-05 14:52:53

标签: makefile g++

我有两个没有主

的文件
  • X.h
  • X.cpp

我想在一个makefile中编译这些

我的makefile是;

CXX = g++
CXXFLAGS_W = -Werror -Wunused-variable -Wunused-value -Wunused-function \
         -Wfloat-equal -Wall
CXXFLAGS_M = -ansi  -pedantic-errors
CXXFLAGS   = ${CXXFLAGS_M} ${CXFLAGS_W}

all:    main
       ./main

当我使用make make X时,编译器会给出一些错误“undefined reference to main”。由于这个原因,我想要新的makefile。 X可以是任何名称。

1 个答案:

答案 0 :(得分:1)

您通常会遇到以下情况:

X.o: X.cpp X.h
    g++ -c -o X.o X.cpp  # or $(CXX) $(CXXFLAGS) -c -o ...

用你需要的任何其他标志。 -c告诉编译器只编译而不是编译和链接,并且通常不直接编译头文件,而是在cpp文件中#include编译。


这是一个makefile,它将两个独立的源文件合并为一个可执行文件:

xy: x.o y.o
    g++ -o xy x.o y.o

x.o: x.cpp x.hpp y.hpp
    g++ -c -o x.o x.cpp

y.o: y.cpp y.hpp
    g++ -c -o y.o y.cpp

x.cpp文件包括x.hppy.hpp,而y.cpp仅包含y.hpp。最终的可执行文件是xy

第一条规则从两个目标文件构建可执行文件。第二个和第三个规则构建了两个目标文件,这是我认为你在问题中要求的。