windows - 使通配符目标始终得到无事可做
问题描述
我编写了一个 makefile,其中包含一些用于构建和运行的通配符目标。我的makefile内容如下。
ALL_EXES=$(shell ls *.exe 2>/dev/null)
.PHONY: all clean $(ALL_EXES) foo
CC=gcc
CFLAGS=-g -Wall
GTKFLAGS=$(shell pkg-config --cflags gtk+-3.0)
GTKLIBS=$(shell pkg-config --libs gtk+-3.0)
PWD=$(shell pwd)
clean:
@echo cleanning
$(shell sh -c "rm *.exe 2>/dev/null")
%: %.c
$(CC) $(GTKFLAGS) -o $@ $< $(GTKLIBS) $(CFLAGS)
%.exe: %
@echo running $@
$(shell sh -c "$(PWD)/$@")
我可以make some-program
成功运行,但是运行时总是会发生“some-program.exe”的任何事情make some-program.exe
。
解决方案
该行%: %.c
应该是,因为这是基于源%.exe: %.c
创建文件的规则。.exe
.c
该行%.exe: %
应该是其他内容,例如run: foo.exe
.
推荐阅读
- redis - 在 WSL2 上重写 Redis Dump 的权限问题
- flutter-web - Flutter-web 模块化:路由太快时如何避免异常?
- c++ - 在第一个线程的 wait_until(20 秒) 之后,在多个线程中完成的向量 push_backs(20 秒内)不显示正确的向量大小
- javascript - 谷歌图表中的 GCC 国家地图
- excel - Power Query 刷新更改表中列的格式
- c# - 从方法中只向用户公开重要的逻辑
- python - 命令“safaridriver --enable”的密码是什么
- java - 如何为来自不同类的对象创建数组
- widget - iOS 14 Widget 无法从 Notification Service Extension 更新
- http - 尝试通过 ALB 将存档上传到 Tomcat 服务器时出现 SocketTimeoutException