0

无论如何,我不再关心隐私了。如果它确实有效,那么保留它有什么意义?不过,我会稍微更改文件名。这是原始代码。

CXX=g++
CXXFLAGS= -Wall
LDFLAGS=-Wno-deprecated -fPIC -pthread
DIR=Exedir/

EXOoffline=EXOdir/offline/
EXOofflinelib=utilities/misc utilities/database utilities/calib reconstruction analysis/manager analysis/jni analysis/root geant/EXOsim
LIBRARY=-lGui -L/usr/lib/root/5.09 -lMinuit -L/nfs/rabbitybunny/g/exo-software/software/hudson/builds-rhel5/build-id/1077/lib -lEXOUtilities -lEXOSim -lEXOROOT -lEXODBUtilities -lEXOAnalysisManager -lEXOAnalysisJNI -lEXOCalibUtilities -lEXOReconstruction -L/afs/rabbitybunny.edu/package/cernroot/vol35/52800svn/Linux26SL5_i386_gcc412/lib -lTreePlayer
INCLUDE=-I $(ROOTSYS)/include `root-config --glibs` -I /nfs/rabbitybunny/g/exo/software/builds/current/include
INCLUDE+=$(addprefix -I$(EXOoffline),$(EXOofflinelib))

all: run

run: main.o
        $(CXX) main.o -o $(DIR)$@ $(LIBRARY)
.cpp.o:
    $(CXX) $(CXXFLAGS) $(INCLUDE) -c -o $@ $<

#run: main.cpp
#       $(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDE) $(LIBRARY) main.cpp -o $(DIR)$@

.PHONY: clean
clean:
        rm -rf *.o $(DIR)run

我明白了。

rabbitybunny@enigma $ make clean
rm -rf *.o Exedir/run
rabbitybunny@enigma $ make
g++ -Wall -I /afs/rabbitybunny.edu/package/cernroot/vol35/52800svn/Linux26SL5_i386_gcc412/include `root-config --glibs` -I /nfs/rabbitybunny/g/exo/software/builds/current/include -IEXOdir/offline/utilities/misc -IEXOdir/offline/utilities/database -IEXOdir/offline/utilities/calib -IEXOdir/offline/reconstruction -IEXOdir/offline/analysis/manager -IEXOdir/offline/analysis/jni -IEXOdir/offline/analysis/root -IEXOdir/offline/geant/EXOsim -c -o main.o main.cpp
g++: -lCore: linker input file unused because linking not done
g++: -lCint: linker input file unused because linking not done
g++: -lRIO: linker input file unused because linking not done
g++: -lNet: linker input file unused because linking not done
g++: -lHist: linker input file unused because linking not done
g++: -lGraf: linker input file unused because linking not done
g++: -lGraf3d: linker input file unused because linking not done
g++: -lGpad: linker input file unused because linking not done
g++: -lTree: linker input file unused because linking not done
g++: -lRint: linker input file unused because linking not done
g++: -lPostscript: linker input file unused because linking not done
g++: -lMatrix: linker input file unused because linking not done
g++: -lPhysics: linker input file unused because linking not done
g++: -lMathCore: linker input file unused because linking not done
g++: -lThread: linker input file unused because linking not done
g++: -lGui: linker input file unused because linking not done
g++: -lm: linker input file unused because linking not done
g++: -ldl: linker input file unused because linking not done
g++ main.o -o Exedir/run -lGui -L/usr/lib/root/5.09 -lMinuit -L/nfs/rabbitybunny/g/exo-software/software/hudson/builds-rhel5/build-id/1077/lib -lEXOUtilities -lEXOSim -lEXOROOT -lEXODBUtilities -lEXOAnalysisManager -lEXOAnalysisJNI -lEXOCalibUtilities -lEXOReconstruction -L/afs/rabbitybunny.edu/package/cernroot/vol35/52800svn/Linux26SL5_i386_gcc412/lib -lTreePlayer

谢谢你的帮助,我真的很感激。(也许我应该学会使用 cmake 代替。)

4

2 回答 2

0

我不知道为什么您要创建一个基本上重复您现有问题的全新问题,除了示例更整洁。为什么不直接编辑您现有的问题?

无论如何,问题在于规则.cpp.o正在编译代码(将源文件.cpp转换为目标文件.o),但是您将链接器标志传递给它(-L$(LIBDIR)等等)。同样,当您将代码与目标链接时,不会t将链接器标志传递给它。run

同样通常您不想-c标志放在CXXFLAGS变量中,因为通常您希望在编译和链接行上都使用该变量以确保您的标志是一致的。

改写:

CXX = g++
CXXFLAGS = -wall
CPPFLAGS = -I$(INCDIR)

all: run
run: run.o
        $(CXX) $(CXXFLAGS) run.o -o $@ -L$(LIBDIR) -lpng
.cpp.o:
        $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
于 2013-07-24T14:21:46.523 回答
0

我认为您的问题来自宏root-config中的命令:INCLUDE

INCLUDE=-I $(ROOTSYS)/include `root-config --glibs` ...

如果你运行它,它可能会列出一大堆-lXxx选项——编译器说的那些是未使用的,因为你在创建目标文件时没有链接。

运行root-config --glibs并查看输出。然后找到一个不同的选项来生成包含选项而不是库。

于 2013-07-24T15:18:54.837 回答