
makefile 内容如下:
CC = gcc CXX ?= g++ LVL ?= -g -O3 Opts += $(LVL) VPATH=../k8s-c-client/kubernetes/config/ ../k8s-c-client/kubernetes/include/ ../k8s-c-client/kubernetes/api/ ../k8s-c-client/kubernetes/watch/ ../k8s-c-client/kubernetes/extrnal CFLAGS = -std=c++11 -Wall -w $(Opts) INCFLAGS = -I../k8s-c-client/kubernetes/config/ -I../k8s-c-client/kubernetes/include -I../k8s-c-client/kubernetes/api -I../k8s-c-client/kubernetes/watch -I../k8s-c-client/kubernetes/external LDFLAGS += $(LDLIBCPP) -rdynamic -lpthread target = predixy cobjs = apiClient.o kube_config.o CoreV1API.o watch_util.h cJSON.o objs = \ Crc16.o \ HashFunc.o \ Timer.o \ Logger.o \ LogFileSink.o \ Alloc.o \ Socket.o \ ListenSocket.o \ AcceptSocket.o \ ConnectSocket.o \ $(multiplexor).o \ Subscribe.o \ Connection.o \ AcceptConnection.o \ ConnectConnection.o \ Buffer.o \ Command.o \ Distribution.o \ Enums.o \ Reply.o \ ConfParser.o \ Conf.o \ Auth.o \ DC.o \ LatencyMonitor.o \ RequestParser.o \ Request.o \ ResponseParser.o \ Response.o \ Server.o \ ServerGroup.o \ ServerPool.o \ ClusterNodesParser.o \ ClusterServerPool.o \ StandaloneServerPool.o \ ConnectConnectionPool.o \ Handler.o \ Proxy.o \ CGetEndpoint.o \ main.o .PHONY : default debug clean default: $(target) $(target): $(cobjs) $(objs) $(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS) %.o : %.c $(CC) -c $^ -o $@ $(INCFLAGS) %.o : %.cpp $(CXX) $(CFLAGS) -c $^ $(INCFLAGS) debug: @make LVL=-g clean: @rm -rf $(objs) $(target) @rm -rf $(cobjs) @echo Done. 报错:
make: *** No rule to make target `apiClient.o', needed by `predixy'. Stop. C++的代码一切正常,就是 C 的死活编译不过(报上面的错),makefile 已经来回检查不知道多少遍了,快崩溃了,希望有老哥能指点一二,感激不尽。
1 thedrwu 2022-03-16 23:21:37 +08:00 via Android apiClient.o: apiClient.c 还有个 issue:如果写了 $^ 不方便带上依赖的.h (至少不是每个编译器都能忽略.h),可以考虑 $< 还是用 cmake 吧 |
2 agagega 2022-03-16 23:25:37 +08:00 用 make -p 看看 |
3 thedrwu 2022-03-16 23:27:01 +08:00 via Android 又看了一眼,还有许多槽点,建议上 cmake 。 |
4 matrixji 2022-03-16 23:33:39 +08:00 规则覆盖了。这样修改: ``` cobjs = apiClient.o kube_config.o CoreV1API.o watch_util.h cJSON.o ``` => ``` cobjs = c/apiClient.o c/kube_config.o c/CoreV1API.o c/cJSON.o ``` ``` %.o : %.c $(CC) -c $^ -o $@ $(INCFLAGS) ``` => ``` c/%.o : %.c $(CC) -c $^ -o $@ $(INCFLAGS) ``` |
6 Cyshall OP @thedrwu 公司之前的项目,不让上 cmake 。其次就是 `$(target): $(cobjs) $(objs)` 这一行如果改成`$(target): $(objs) $(cobjs)` 这样,也就是先编译 C++的代码没任何问题,就是轮到 C 的时候会报错。 老哥如果觉得哪里有问题还请多多指点一下 |
7 kilasuelika 2022-03-17 08:03:51 +08:00 via Android 是不是没有找到 apiClient.c 噢? |
8 godknowsme 2022-03-17 22:07:12 +08:00 via Android 我猜可能是%.o 区分不了两种规则吧,可以试试换个后缀 |
9 Cyshall OP |