gpt4 book ai didi

c++ - 在 Linux 上编译的程序没有在#ifdef 部分获取代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:25 26 4
gpt4 key购买 nike

我有一个正在开发的跨平台程序,它有几个文件

#ifdef WIN32
...inclues
#endif
#ifdef LINUX
..inlcudes
#endif

当我在 LINUX 上编译时,我不断收到有关找不到函数等的错误,但是如果我注释掉 #ifdef LINUX block (仍然保持包含未注释)它会工作,所以它接缝就像我的定义不是正常工作。

这是我的 make 文件(文件名已更改):

CC  = gcc
CPP = g++

CFLAGS = -DLINUX $(INCLUDES) -c -g -O0 -Wall -fpic


INCLUDES = -I.

LFLAGS += -fpic -shared

LFLAGS += -lpthread

CFILES = a.c b.c c.c d.c e.c f.cpp g.cpp h.cpp i.cpp

##all: $(SFILES:.s=.s.o) $(CFILES:.c=.o) $(CFILES:.cpp=.o)
## $(CPP) $(INCLUDES) $(LFLAGS) -o libclient.so.1.0 $(CFILES:.c=.o) $(CFILES:.cpp=.o)

all: $(SFILES:.s=.s.o) $(CFILES:.c=.o)
$(CPP) $(INCLUDES) $(LFLAGS) -o libclient.so.1.0 $(CFILES:.c=.o)


%.o : %.c

$(CPP) -c $(CFLAGS) $< -o $@

%.o : %.cpp

$(CPP) -c $(CFLAGS) $< -o $@

clean:

rm *.o libclient.so.1.0

最佳答案

您的 make 文件实际上确实适用于 c 文件,但不适用于 c++ 文件。

这是因为您为 c 编译调用了您的自定义编译命令行,但您的 cpp 文件直接进入有效的链接命令行,它没有指定编译标志。

关于c++ - 在 Linux 上编译的程序没有在#ifdef 部分获取代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4925300/

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