CLion CMake ld: библиотека не найдена + вопросы Vulkan и OpenGL - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь получить базовую c установку с GLFW и Vulkan для предстоящего проекта. Я пытался заставить работать простой пример HelloTriangle. Пока библиотека Vulkan собирается нормально, GLFW выдает ld: library not found for -lglfw3 при запуске программы. Я также не уверен, является ли мой пример HelloTriangle рабочим примером; это был самый простой c пример, который я видел, чтобы проверить Вулкана. Вот мой CMakeList.txt:

cmake_minimum_required(VERSION 3.16)
project(OpenGLRun)

set(CMAKE_CXX_STANDARD 14)
set(glfw3_DIR /usr/local/Cellar/glfw/3.3.2/lib/cmake/glfw3)

add_executable(OpenGLRun main.cpp)

find_package(vulkan REQUIRED)
find_package(glm REQUIRED)
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)

target_link_libraries(OpenGLRun Vulkan::Vulkan)
target_link_libraries(OpenGLRun glm)
target_link_libraries(OpenGLRun OpenGL::GL)
target_link_libraries(OpenGLRun glfw3)

И основной. cpp пример кода, который я пытался запустить для доказательства того, что все работает:

#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

#include <iostream>
#include <stdexcept>
#include <cstdlib>

const uint32_t WIDTH = 800;
const uint32_t HEIGHT = 600;

class HelloTriangleApplication {
public:
    void run() {
        initWindow();
        initVulkan();
        mainLoop();
        cleanup();
    }

    private:

        GLFWwindow* window;

        void initWindow() {
            glfwInit();

            glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
            glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);

            GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan", nullptr, nullptr);
        }

private:
    void initVulkan() {

    }

    void mainLoop() {
        while (!glfwWindowShouldClose(window)) {
            glfwPollEvents();
        }
    }

    void cleanup() {
        glfwDestroyWindow(window);

        glfwTerminate();
    }
};

int main() {
    HelloTriangleApplication app;

    try {
        app.run();
    } catch (const std::exception& e) {
        std::cerr << e.what() << std::endl;
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

И, наконец, В будущем вы бы порекомендовали менеджеры пакетов в C ++ / CMake?

Заранее спасибо

1 Ответ

2 голосов
/ 24 апреля 2020

Руководство по сборке GLFW предполагает, что независимо от того, компилируете ли вы GLFW и связываете его вместе с вашим приложением, или связываете установленный GLFW с вашим приложением, вы можете ссылка GLFW для вашего приложения, используя цель glfw (не glfw3). Измените команду target_link_libraries() в вашем CMake на следующее:

target_link_libraries(OpenGLRun PRIVATE glfw)

Обратите внимание, вы должны всегда предоставлять аргумент области видимости при использовании целевых команд, таких как как это, чтобы сказать CMake, является ли это требованием сборки, требованием использования, или обоими.

...