为FTP服务器制作文件-当头文件被修改时编译
makefile for ftp server - compile when header file modified
我为我的项目创建了一个makefile,它看起来像这样:
CC = g++
LDFLAGS = -lpthread
CFLAGS = -Wall -pedantic -Wno-long-long -O0 -ggdb
SOURCES = main.o List.o ProcessCommands.o HandleTransfers.o
all: $(SOURCES)
%.o: %.cpp
$(CC) $< -o $@ -c $(CFLAGS) $(LDFLAGS)
compile:
$(CC) $(SOURCES) -o executable/ftp $(LDFLAGS)
run:
./executable/ftp
clean:
rm -rf *o ftp
doc:
doxygen ftpDocConf
主要问题是,当我修改任何头文件时,它包含在我的源文件之一中,"make all"命令不会注意到任何更改,因此返回"make: Nothing to be done for ' all'"。我已经在网上搜索过了,但仍然无法让它工作。我对makefile还有另一个"问题"。这个makefile用于的项目是一个ftp服务器,当我输入"make run"来运行可执行文件时,对服务器做一些事情并退出程序,makefile返回"make: * [run] Interrupt"。有没有办法让这个消息不出现?我猜它出现是因为我使用ctrl+c退出程序,但有一种方法可以做到不同,所以我不会得到任何"错误"?
提前感谢您的回答
当您更改头文件时,目标文件不会重新编译的原因是您没有将任何头文件声明为目标文件的先决条件。您必须显式地执行此操作,否则将该信息安排为自动生成(通常由编译器生成)。你的模式规则%.o : %.cpp
告诉make,如果一个.cpp
文件改变了,关联的.o
文件必须重建。您需要添加一些xxx.o : xxx.h ...
规则,以便make也知道头文件。或者,正如我提到的,让它们自动生成。这里有很多解决方案,例如:GNU make:用生成的头文件生成自动依赖
对于你的第二个问题,没有办法这样做。当你在终端上按下^C
时,它不仅向ftp程序发送中断信号,还向make
本身发送中断信号。没有办法说服make忽略我意识到的那个信号。要做到这一点的唯一方法是编写一个包装器来改变进程组ID,这样它就不会接收到这些信号…但是我不知道ftp程序如何再次加入进程组。
如果这是一个严重的问题,我建议您找到一种破坏性较小的方法来退出程序。也许您可以使用kill
或类似的方法直接向进程发送SIGHUP或SIGTERM。
如果你想忽略这个错误,把你的规则改成这样:
run:
./executable/ftp || true
MadScientist很好地解释了标题的问题。我可以添加这些廉价和肮脏的修复:
# header files added as dependencies of .o files below
%.o: %.cpp header1.h header2.h header3.h
$(CC) $< -o $@ -c $(CFLAGS) $(LDFLAGS)
要解决make run
问题,可以将运行目标更改为在xterm中执行——这样xterm就可以捕获信号,而不是执行:
run:
xterm -e ./executable/ftp
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 已修改的LinkedList未在文本文件本身中更新
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 什么文件可以修改 atom 的C++语法?
- 修改生成文件以简化框架 #include 路径
- Windows std::fstream 修改文件后打开()?
- Chilkat SFTP 文件修改时间不与上传更新
- 如何在 Windows 上的 C++ 中根据文件的修改时间读取目录中的文件
- 如何使用Winforms C#或C++.Net在不更改文件中其他内容的情况下修改jpg文件中的Orientation e
- 如何修改Lambda表达式以将输出放入文本文件
- 修改 XML 文件 QXMLStreamReader/Writer
- 如何从 avi 文件中抓取所有帧 - 如何修改 MS 样本采集卡样本
- accept(..) 似乎正在修改我给它的文件描述符参数
- 将头文件和相关修改添加到生成文件
- 在没有root权限的情况下安装NTL,并在生成文件中修改其构建路径
- 如何使用c 在Windows中使用更改日记帐查找文件修改
- 使用生成文件修改项目组织
- 以非管理员身份在 Windows 上的 C 中检查上次文件修改时间
- 在C++中设置文件修改时间的可移植方法
- 使用stat api获取不正确的文件修改时间