Как использовать Makefile в macOS? - PullRequest
1 голос
/ 18 июня 2020

В 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

Ответы [ 2 ]

0 голосов
/ 21 июня 2020
.PHONNY: all

all: clean a.out

a.out:
    clang++ -I glad/include -F /Library/frameworks -framework OpenGL main.cpp glad/src/glad.c /usr/local/Cellar/glfw/3.3.1/lib/libglfw.3.3.dylib

clean:
    rm a.out

Ссылки:

0 голосов
/ 19 июня 2020

Вы не определили правило для построения OBSJ, поэтому make использовал его встроенные правила. Правило PROGRAM связывает только объектные файлы, и нет смысла указывать там CPPFLAGS.

...