在 Xcode 或替代 IDE 中使用 Makefile

jms*_*547 0 ide xcode gcc makefile

我对 Xcode、Makefile 和一般编程都很陌生。

我已经获得了一个可用的现有 C++ 代码,该代码是使用 Makefile 构建的。使用 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
...
Run Code Online (Sandbox Code Playgroud)

myproj生成的可执行文件在哪里。

我想使用 Xcode 11(或任何现代 IDE - 请参见下文)的调试功能来探索和学习我想要使用的代码。按照这些说明,我创建了一个命令行 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
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我的 Makefile 工作得很好,并且在命令行上我的系统可以找到编译器:

>$ whereis gcc  
/usr/bin/gcc
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么 Xcode 找不到编译器,以及我如何修复它吗?(此外,任何关于使用 Xcode 来理解旨在使用 Makefile 构建的代码的提示/警告将不胜感激!)

另外,
我并不执着于使用 Xcode,我只是认为这很自然,因为我在 Mac 上工作。如果有另一个具有良好调试器的 IDE 更适合使用 Makefile 构建命令行可执行文件,请告诉我!

jms*_*547 5

PATH感谢 MadScientist 的帮助,我发现了环境变量没有从 bash 导入的问题(另请参阅此处)。通过反复试验,我发现我需要PATH在“构建设置”中设置正确的几个位置,并Pass build settings in environment在创建新的外部构建目标时勾选复选框。

为了供将来参考,这是我使用的完整过程。回想一下,我的问题是我想要
- 将 gnu Makefile 项目导入 Xcode 11,
- 该项目是一组源文件和一个生成在命令行上运行的程序的 Makefile,
- 源文件(以及 Makefile )依赖于PATH我需要在 Xcode 中设置的 a 中找到的库(在我的例子中,我通过 MacPorts 安装了这些库)。

  1. File > New > New Project
  2. 在对话框中选择macOS > Command Line Tool、产品名称等和语言。输入您的项目位置。
  3. 删除默认目标和两个默认文件夹。
  4. File > New > Target...创建一个新目标,然后Cross-platform > External Build System. 为新目标选择(产品)名称,然后选择构建工具(我的是/usr/bin/make)。
  5. (在编辑器区域中选择步骤 4 中的新目标)在选项Info > External Build Tool Configuration卡中,选择Directory您的 makefile 所在/将在的位置。确保勾选该 Pass build settings in environment 复选框
  6. 在编辑器区域中选择项目。PATH通过转到该Build Settings > All选项卡,单击+ > Add User-Defined Setting,然后在第一列中添加PATH,然后在第二列中添加所需的库路径(在我的例子中,${PATH}:/opt/local/bin:/opt/local/sbin将路径附加到我通过 MacPorts 安装的库), 设置正确的外部库。
  7. (我不知道这一步是否是绝对必要的,但无论如何)单击方案菜单,然后Edit scheme...Product > Scheme > Edit scheme...。然后在下面Run > Arguments > Environment Variables添加PATH步骤 6 中的内容。
  8. 单击方案菜单并选择新目标,以便刻度线位于其旁边(这样这是活动目标??)。
  9. 将源文件添加到项目中,例如将源文件从 Finder 拖放到导航区域中。确保勾选Add to target复选框。
  10. 确保在 Makefile 中,编译器-g设置了启用调试的标志。
  11. Cmd+B构建。
  12. Edit scheme...构建完成后,通过选择(按照步骤 7)告诉 Xcode 可执行文件的位置,然后Run > Info > Executable > Other...导航到项目文件夹,并选择在步骤 11 中构建的命令行可执行文件。
  13. 按下Cmd+R即可运行。

也许某些步骤是不需要的,我不确定。我很乐意了解是否有更好的方法来做到这一点。