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/external
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 |