c++ - 如何在 macOS 上使用 Makefile?
问题描述
在 macOS 上,如果我用
clang -I. -framework OpenGL main.cpp glad.c /usr/local/Cellar/glfw/3.3.1/lib/libglfw.3.3.dylib
我可以从以下代码构建并运行生成的可执行文件:
#define GL_SILENCE_DEPRECATION
#include <stdio.h>
#include "glad/glad.h"
#include "/usr/local/Cellar/glfw/3.3.1/include/GLFW/glfw3.h"
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClearColor(0.9, 0.1, 0.1, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
但我想使用 Makefile 构建,所以我准备了
CC = clang
XXFLAGS = -g -Wall -v
CPPFLAGS = -I.
LDLIBS = -lm -L/usr/local/Cellar/glfw/3.3.1/lib -lglfw
LDFLAGS = -framework OpenGL
OBJS = main.o glad.o
PROGRAM = main
$(PROGRAM): $(OBJS)
$(CXX) $^ $(XXFLAGS) $(CPPFLAGS) $(LDLIBS) $(LDFLAGS) -o $@
clean:
-rm -f *.o
distclean: clean
-rm -Rf $(PROGRAM)
它实际上是可执行文件,但是当我运行它时,我得到了
$ ./main
Segmentation fault: 11
所以我猜Makefile有问题,对吧?
$ make -n
c++ -I. -c -o main.o main.cpp
clang -I. -c -o glad.o glad.c
c++ main.o glad.o -g -Wall -v -I. -lm -L/usr/local/Cellar/glfw/3.3.1/lib -lglfw -framework OpenGL -o main
解决方案
您没有定义要构建的规则OBSJ
,因此make
使用了它的内置规则。该PROGRAM
规则仅链接目标文件,没有必要CPPFLAGS
在那里指定。
推荐阅读
- html - 如何为感叹号添加颜色?
- liferay - Liferay 7.3:如何预配置嵌入在页面片段中的 portlet?
- python - 如何将正则表达式匹配函数的结果放入熊猫数据框中?
- sql - 不像在桌子上的操作
- java - 为什么 Firebase ML Kit 每次都检测同一张脸的不同轮廓值
- c - 如何在c中用#define更改#include?
- angular - 堆积柱形图的数据标签未显示在角度项目的 Highcharts 中
- cordova - 如何修复服务响应丢失安装推荐人安装时间戳
- json - 如何从 Json api 制作动态侧边栏?
- xamarin - 如何使本地 ContentView 绑定标签文本