如何在 macOS 上制作 C++ makefile?

问题描述 投票:0回答:2

你好,我正在尝试在 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
c++ macos makefile
2个回答
0
投票

这不一定与您的 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++。


0
投票

我想编译使用这些库的代码

那些不是图书馆。这些是头文件,您需要指定编译器访问它们的包含路径。

好消息是前四个包含文件(stdlib.h、stdio.h、cstring、iostream)是标准头文件。坏消息是最后一个包含文件(portaudio.h)来自第三方库PortAudio。很可能您不仅需要将安装 portaudio 版本的路径传递给编译器,而且还需要传递一个库以允许您的构建在链接期间包含其库。

© www.soinside.com 2019 - 2024. All rights reserved.