你好,我正在尝试在 MacOS 上为 C++ 制作一个简单的 makefile
我想编译使用这些库的代码
#include <stdlib.h>
#include <stdio.h>
#include <cstring>
#include <iostream>
#include <portaudio.h>
我正在尝试使用这个 makefile,但我不知道如何添加库。
.PHONY: all clean
CC:= clang++
CFLAGS = -std=c++11 -Wno-deprecated-enum-enum-conversion -O2
SOURCES := $(wildcard *.cpp)
OBJECTS := $(patsubst %.cpp,%.o,$(SOURCES))
DEPENDS := $(patsubst %.cpp,%.d,$(SOURCES))
all: main
clean:
$(RM) $(OBJECTS) $(DEPENDS) main
-include $(DEPENDS)
# Make object files
%.o: %.cpp Makefile
$(CC) $(WARNING) $(CFLAGS) -MMD -MP -c $< -o $@
# Linking the executable from the object files
main: $(OBJECTS)
$(CC) $^ $(LDFLAGS) -o $@
./main
这不一定与您的 Makefile 有关,正如您所说,您会看到一条红线。这就是你的 IDE。所以你做什么将取决于你的 IDE。
问题的一部分是,根据你安装编译器的方式,东西可能会落在奇怪的地方。
我敢打赌,如果你看一下,你会发现没有 /usr/include 目录。你可以做这样的事情:
find / -name stdlib.h 2>/dev/null
这将为您提供包含文件所在位置的提示。然后,您可以向上追踪,看看某个地方是否有您应该使用的符号链接。
在我的 Mac 上,我看到 gcc 安装在 /usr/local/celler/gcc/version/c++/version... 唷。我没有去寻找任何符号链接,但我没有 /usr/include。
我还有/Library/Developer/CommandLineTools/usr/include/c++/v1...
您可以通过手动创建从 /usr/include 到这些位置之一的符号链接来解决此问题。可能有更好的方法来做到这一点。
或者您可能想添加您的 IDE 可以识别的 -I 选项。然后你的 Makefile 中将需要这些。
这是在 Mac 上进行 C++ 编程最烦人的事情之一。东西可以用,但是如果没有一些游戏,安装不一定能直接开箱即用。或者它们可能设置正确,但如果您进行操作系统升级,MacOS 会删除一些内容。 (我很确定 Mac 在某一时刻配置正确,但 g++ 无法再次找到包含文件。)。
您可能还需要使用 clang 而不是 g++。
我想编译使用这些库的代码
那些不是图书馆。这些是头文件,您需要指定编译器访问它们的包含路径。
好消息是前四个包含文件(stdlib.h、stdio.h、cstring、iostream)是标准头文件。坏消息是最后一个包含文件(portaudio.h)来自第三方库PortAudio。很可能您不仅需要将安装 portaudio 版本的路径传递给编译器,而且还需要传递一个库以允许您的构建在链接期间包含其库。