gpt4 book ai didi

c++ - gnu 使。仅重新编译未更改的文件

转载 作者:行者123 更新时间:2023-11-30 03:02:19 25 4
gpt4 key购买 nike

请帮助我制作文件。我希望 `make' 只重新编译已更改的文件。这是我的生成文件:

ROOT_DIR= ..
BUILD_TYPE= Release
BUILD_DIR= $(ROOT_DIR)/$(BUILD_TYPE)
O_DIR= $(BUILD_DIR)/obj

TARGETS= ftp_auto_backup sftp_auto_backup

CXX= g++
CXXFLAGS= -DBOOST_THREAD_USE_LIB -O3 -Wall -fmessage-length=0
FTP_LDFLAGS= -static-libstdc++ -static-libgcc -s -L $(ROOT_DIR)/lib/Release -l:libboost_thread-mgw46-mt-1_49.a -l:libcommon.a \
-l:libfile.a -l:libfilesearcher.a -l:libftpclient.a -l:libftplib.a -l:libdbclient.a -l:libsqlite3.a -l:libscheduler.a -l:libws2_32.a
SFTP_LDFLAGS= -static-libstdc++ -static-libgcc -s -L $(ROOT_DIR)/lib/Release -l:libboost_thread-mgw46-mt-1_49.a -l:libcommon.a \
-l:libfile.a -l:libfilesearcher.a -l:libdbclient.a -l:libsqlite3.a -l:libscheduler.a -l:libsftpclient.a -l:libws2_32.a -l:libssh.dll

OBJECTS= appconfig.o backuplauncher.o clientbackup.o main.o
LD_OBJECTS= $(addprefix $(O_DIR)/,$(OBJECTS))

all: init $(TARGETS)

debug: CXXFLAGS= -O0 -g3 -Wall -fmessage-length=0
debug: BUILD_TYPE= Debug
debug: all

init:
@mkdir -p $(BUILD_DIR)
@mkdir -p $(O_DIR)

ftp_auto_backup: set_type_ftp $(OBJECTS)
$(CXX) -o $(BUILD_DIR)/$@.exe $(LD_OBJECTS) $(FTP_LDFLAGS)

sftp_auto_backup: set_type_sftp $(OBJECTS)
$(CXX) -o $(BUILD_DIR)/$@.exe $(LD_OBJECTS) $(SFTP_LDFLAGS)

set_type_ftp:
$(eval CXXFLAGS+=-DPROJECT_TYPE=FTP)

set_type_sftp:
$(eval CXXFLAGS+=-DPROJECT_TYPE=SFTP)

%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o $(O_DIR)/$@

clean:
rm -rf $(addprefix $(ROOT_DIR)/Release/obj/,$(OBJECTS)) $(addprefix $(ROOT_DIR)/Debug/obj/,$(OBJECTS))
rm -rf $(addprefix $(ROOT_DIR)/Release/,$(addsuffix .exe,$(TARGETS))) $(addprefix $(ROOT_DIR)/Debug/,$(addsuffix .exe,$(TARGETS)))

是的,我知道 Generating Prerequisites Automatically ,但我真的应该使用它吗?提前致谢!

最佳答案

您的目标取决于当前目录中的对象,而不是 obj/中的对象。更改为:

ftp_auto_backup: set_type_ftp $(LD_OBJECTS)
$(CXX) -o $(BUILD_DIR)/$@.exe $(LD_OBJECTS) $(FTP_LDFLAGS)

sftp_auto_backup: set_type_sftp $(LD_OBJECTS)
$(CXX) -o $(BUILD_DIR)/$@.exe $(LD_OBJECTS) $(SFTP_LDFLAGS)

# (...)

$(O_DIR)/%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o $@

是的,如果您希望目标文件不仅在更改 .cpp 文件时重新编译,而且在更改 header (.h) 文件时也重新编译,则需要生成这些先决条件...

关于c++ - gnu 使。仅重新编译未更改的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10236777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com