【发布时间】:2020-03-29 20:19:01
【问题描述】:
我是 Xcode、Makefile 和一般编程的新手。
我已经获得了使用 Makefile 构建的现有 C++ 代码。使用 Makefile,我可以毫无问题地在我的 Mac (MacOS 10.14.6) 上构建和运行可执行文件。
Makefile 的开头是
CC = g++-mp-9 -Wall -O2 -std=c++14 -fopenmp
DEBUG =
CFLAGS = -c $(DEBUG) -I/opt/local/include
LFLAGS = $(DEBUG) -L/opt/local/lib -framework Accelerate -march=native -lfftw3 -lfftw3_threads -lopenblas -lm -lpthread -larmadillo
myproj: $(OBJS)
$(CC) -o myproj $(OBJS) $(LFLAGS)
main.o: main.cpp const.h functions.h
$(CC) $(CFLAGS) main.cpp
...
myproj 是生成的可执行文件。
我想使用 Xcode 11(或任何现代 IDE - 请参阅下面的 ALTERNATIVELY)的调试功能来探索和学习我想使用的代码。在these instructions 之后,我创建了一个命令行 Xcode 项目并设置了一个外部构建目标。
但是,当我尝试在 Xcode 中构建它时,我收到以下错误
g++-mp-9 -Wall -O2 -std=c++14 -fopenmp -c -I/opt/local/include main.cpp
make: g++-mp-9: No such file or directory
make: *** [main.o] Error 1
这很奇怪,因为我的 Makefile 工作得很好,而且在命令行我的系统可以找到编译器:
>$ whereis gcc
/usr/bin/gcc
谁能解释一下为什么 Xcode 找不到编译器,以及我该如何解决它? (此外,任何关于使用 Xcode 来理解设计为使用 Makefile 构建的代码的提示/警告都将不胜感激!)
交替
我并不热衷于使用 Xcode,我只是认为这很自然,因为我正在使用 Mac。如果有另一个带有良好调试器的 IDE 更适合使用 Makefile 构建命令行可执行文件,请告诉我!
【问题讨论】:
-
请注意,
gcc与g++-mp-9不同,因此whereis gcc没有失败这一事实与您遇到的错误无关。你想使用whereis g++-mp-9 -
啊,好吧,
>$ whereis g++-mp-9什么也没给我返回,这表明它不在我的系统上。这使得我的 Makefile 成功编译代码的事实更加奇怪! -
并不是说它不在您的系统上的任何地方。就是它不在
whereis知道要查找的任何目录中。whereis在 MacOS 上是一个非常有限的命令。您应该尝试类似 POSIX 标准command -v g++-mp-9或特定于 bash 的type -a g++-mp-9。我对 MacOS 或 Xcode 都不太了解:我不喜欢这两个系统。但是我想你的 shell 很可能正在设置PATH以便能够在 Xcode 没有以这种方式设置时找到这个编译器。也许它不会读取您的交互式 shell 配置或其他内容。 -
哦,这很有用,谢谢。
type命令揭示了通往g++-mp-9的正确路径。看起来这是在bash_profile中设置的(当我port installed 编译器时,通过MacPorts 自动添加的一行)。所以正如你所说,我可能需要了解如何将PATH从 shell 导出到 Xcode。谢谢!