我可以在 g++ 中使用 -MM 选项以生成文件规则格式生成依赖项。
g++ -MM module2.cpp -I../src -I../../raven-set -I. -I../src/ext
输出
module2.o: module2.cpp pch.h ../src/theGlobalDefines.h \
../../raven-set/raven_sqlite.h ../src/ext/sqlite3.h Module2.h \
cPelexMixerComponent.h cErrorHandler.h cTimedEvent.h cPelexConfig.h \
../src/sgp.h ../src/cCircularVector.h ../../raven-set/cTimerBusyLoop.h \
../src/channelIdentification.h ../src/cPacketData.h cRxTx.h \
cOutputTransmitter.h cDelayStats.h cMCUSB202.h cPeakerServer.h cInput.h \
../src/cSequenceNumber.h cRxPelexWireless.h ../../raven-set/cRunCount.h \
cPeakFilter.h cSPO2StateMachine.h wrs_cProcessed.h ../src/log.h \
wrs/cRaw.h wrs/cPacket.h wrs/cCalibrate.h wrs/cStream.h \
../src/cPelexMixerConfig.h ../src/ext/json.h wrs/cSignalProcessor_wrs.h \
cD1ZeroCross.h ../src/cVitals.h cUI.h cTimeProfiler.h \
../licenser/cLicence.h cSignalProcessor.h ../src/cPeakFilterSet.h \
../src/cPeakFinder.h cDataRange.h cDerivativeTemplate.h \
cDerivativePeak.h cInputRecord.h cSGPOutput.h cSignalProcessorConfig.h \
cHeartRate.h ../src/StatusDB.h cLogger.h cKeyBoardMonitor.h \
wrs/cStartSequence.h ../src/Configure.h ../src/HistoryDB.h \
../../raven-set/cRunWatch.h version.h
现在我该怎么办?
有没有办法让 make 运行 g++ -MM 命令,然后使用生成的规则?
这是生成文件
#source file search paths
VPATH = wrs . ../src ../src/ext ../licenser
# compiler include search paths
INCS=-I../src -I../src/ext \
-I. -I"C:\Users\Public\Documents\Measurement Computing\DAQ\C" \
-I../../boost/boost1_72
# libraries required by linker
LIBS=-lstdc++fs -lws2_32 -lwsock32 \
-L"C:\Users\Public\Documents\Measurement Computing\DAQ\C" \
-lcbw64 -lIphlpapi \
-L../../boost/boost1_72/lib \
-lboost_thread-mgw82-mt-x64-1_72 \
-lboost_system-mgw82-mt-x64-1_72 \
-lboost_program_options-mgw82-mt-x64-1_72 \
-lboost_filesystem-mgw82-mt-x64-1_72
# folder for .o files
ODIR=./obj
# sources
_OBJ = \
cLicence.o \
sha1.o \
ChannelIdentification.o \
ChannelLabels.o \
Configure.o \
CubicSpline.o \
HistoryDB.o \
StatusDB.o \
cPacketData.o \
cPeakFilterSet.o \
cPeakFinder.o \
cPelexMixerConfig.o \
cVitals.o \
cRunWatch.o \
cSpline.o \
cTimerBusyLoop.o \
json.o \
raven_sqlite.o \
sqlite3.o \
log.o \
cD1ZeroCross.o \
cDataRange.o \
cDelayStats.o \
cDerivativeTemplate.o \
cErrorHandler.o \
cHeartRate.o \
cInput.o \
cInputRecord.o \
cMCUSB202.o \
cOutputTransmitter.o \
cPacketAlpha.o \
cPacketWRS.o \
cPeakFilter.o \
cPeakFinderSustainedD1.o \
cPeakFinderTallPoppy.o \
cPeakerServer.o \
cPelexConfig.o \
cPelexMixerComponent.o \
cRxPelexWireless.o \
cRxTx.o \
cSGPOutput.o \
cSPO2StateMachine.o \
cSignalProcessor.o \
cTimeProfile.o \
cTimedEvent.o \
cUI.o \
module2.o \
sgp.o \
cCalibrate.o \
cRaw.o \
cSignalProcessor_wrs.o \
cStartSequence.o \
cStream.o \
wrs_cProcessed.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
$(ODIR)/sqlite3.o: sqlite3.c
gcc -c -o $@ $<
$(ODIR)/%.o: %.cpp
g++ -std=c++17 -m64 -fexceptions -D_mingw_ -DMODULE2 -O2 \
-c -o $@ $< $(INCS)
mixer: $(OBJ)
g++ -m64 -O2 -s -o ../bin/PelexMixer.exe $^ $(LIBS)
答案 0 :(得分:0)
我需要执行以下步骤来生成、存储和包含依赖文件
这遵循@G.M 提供的 link 中的提示以及添加到此答案中的有用评论
步骤 1: 定义一些请求生成和存储依赖项的标志。请注意,我将 .o 和 .d 文件都存储在同一个文件夹中 - 让事情变得更简单
# flags requesting dependency generation
DEPFLAGS = -MT $@ -MMD -MP -MF $(ODIR)/$*.d
第 2 步向编译规则添加标志,以便我们继续生成它们
$(ODIR)/%.o: %.cpp
g++ -std=c++17 -m64 -fexceptions -D_mingw_ -DMODULE2 -O2 \
$(DEPFLAGS) \
-c -o $@ $< $(INCS)
步骤 3 包含依赖文件
# convert list of object files to list of dependency files
DEPFILES := $(_OBJ:%.o=$(ODIR)/%.d)
# empty rule, so make won't complain
# about not having a rule to make the dependency file if missing
$(DEPFILES):
# include the dependency files
include $(wildcard $(DEPFILES))
这是我的完整生成文件,其中包含上述更改
#source file search paths
VPATH = wrs . ../src ../src/ext ../licenser
# compiler include search paths
INCS=-I../src -I../src/ext \
-I. -I"C:\Users\Public\Documents\Measurement Computing\DAQ\C" \
-I../../boost/boost1_72
# libraries required by linker
LIBS=-lstdc++fs -lws2_32 -lwsock32 \
-L"C:\Users\Public\Documents\Measurement Computing\DAQ\C" \
-lcbw64 -lIphlpapi \
-L../../boost/boost1_72/lib \
-lboost_thread-mgw82-mt-x64-1_72 \
-lboost_system-mgw82-mt-x64-1_72 \
-lboost_program_options-mgw82-mt-x64-1_72 \
-lboost_filesystem-mgw82-mt-x64-1_72
# folder for .o files and depedency files
ODIR = ../pelexmixer/obj
# flags requesting dependency generation
DEPFLAGS = -MT $@ -MMD -MP -MF $(ODIR)/$*.d
# sources
_OBJ = \
cLicence.o \
sha1.o \
ChannelIdentification.o \
ChannelLabels.o \
Configure.o \
CubicSpline.o \
HistoryDB.o \
StatusDB.o \
cPacketData.o \
cPeakFilterSet.o \
cPeakFinder.o \
cPelexMixerConfig.o \
cVitals.o \
cRunWatch.o \
cSpline.o \
cTimerBusyLoop.o \
json.o \
raven_sqlite.o \
sqlite3.o \
log.o \
cD1ZeroCross.o \
cDataRange.o \
cDelayStats.o \
cDerivativeTemplate.o \
cErrorHandler.o \
cHeartRate.o \
cInput.o \
cInputRecord.o \
cMCUSB202.o \
cOutputTransmitter.o \
cPacketAlpha.o \
cPacketWRS.o \
cPeakFilter.o \
cPeakFinderSustainedD1.o \
cPeakFinderTallPoppy.o \
cPeakerServer.o \
cPelexConfig.o \
cPelexMixerComponent.o \
cRxPelexWireless.o \
cRxTx.o \
cSGPOutput.o \
cSPO2StateMachine.o \
cSignalProcessor.o \
cTimeProfile.o \
cTimedEvent.o \
cUI.o \
module2.o \
sgp.o \
cCalibrate.o \
cRaw.o \
cSignalProcessor_wrs.o \
cStartSequence.o \
cStream.o \
wrs_cProcessed.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
$(ODIR)/sqlite3.o: sqlite3.c
gcc -c -o $@ $<
$(ODIR)/%.o: %.cpp
g++ -std=c++17 -m64 -fexceptions -D_mingw_ -DMODULE2 -O2 \
$(DEPFLAGS) \
-c -o $@ $< $(INCS)
mixer: $(OBJ)
g++ -m64 -O2 -s -o ../bin/PelexMixer.exe $^ $(LIBS)
DEPFILES := $(_OBJ:%.o=$(ODIR)/%.d)
$(DEPFILES):
include $(wildcard $(DEPFILES))