C++ CLion CMake ld:未找到库+;Vulkan和OpenGL问题

C++ CLion CMake ld:未找到库+;Vulkan和OpenGL问题,c++,opengl,cmake,glfw,vulkan,C++,Opengl,Cmake,Glfw,Vulkan,我正试图与GLFW和Vulkan为即将到来的项目建立一个基本的设置。我试着让一个简单的Hellotringle示例起作用。当Vulkan库正常构建时,GLFW在运行程序时抛出一个ld:library not found for-lglfw3。我也不确定我的HelloTriangle示例是否是一个有效示例;这是我见过的测试Vulkan的最基本的例子。 这是我的CMakeList.txt: cmake_minimum_required(VERSION 3.16) project(OpenGLRun)

我正试图与GLFW和Vulkan为即将到来的项目建立一个基本的设置。我试着让一个简单的Hellotringle示例起作用。当Vulkan库正常构建时,GLFW在运行程序时抛出一个
ld:library not found for-lglfw3
。我也不确定我的HelloTriangle示例是否是一个有效示例;这是我见过的测试Vulkan的最基本的例子。 这是我的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)
我试图运行main.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;
}
#定义GLFW(包括)
#包括
#包括
#包括
#包括
常数32_t宽度=800;
施工单位32_t高度=600;
类HellotriangApplication{
公众:
无效运行(){
初始化窗口();
initVulkan();
mainLoop();
清理();
}
私人:
GLFWwindow*窗口;
void initWindow(){
glfwInit();
glfwWindowHint(GLFW_客户端_API、GLFW_否_API);
glfwWindowHint(GLFW_可调整大小,GLFW_为假);
GLFWwindow*window=glfwCreateWindow(宽度、高度、“Vulkan”、nullptr、nullptr);
}
私人:
void initVulkan(){
}
void mainLoop(){
而(!glfwWindowShouldClose(窗口)){
glfwPollEvents();
}
}
空洞清理(){
GLFW窗口(窗口);
glfwTerminate();
}
};
int main(){
HelloTriangleApplication应用程序;
试一试{
app.run();
}捕获(const std::exception&e){
std::cerrGLFW建议,无论您是随应用程序一起编译和链接GLFW,还是将已安装的GLFW链接到应用程序,都可以使用
GLFW
目标(而不是
glfw3
)将GLFW链接到应用程序。将CMake中的命令更改为:

target_link_libraries(OpenGLRun PRIVATE glfw)

请注意,在使用基于目标的命令(如此)时,您应该始终提供作用域参数,以告知CMake这是生成要求还是使用要求,或者两者兼而有之。

您可以尝试链接到
glfw
,如上所述。@BDL是的,我将就此问题询问另一个问题,thanks@squarekittles但是什么时候我从CMake列表中删除了GLFW的链接和查找我得到了这个错误(仅包括main.cpp中的GLFW)ld:symbol未找到架构x86\u 64抱歉,我的意思是只更改CMake中的一行。将此
目标链接库(OpenGLRun glfw3)
更改为:
目标链接库(OpenGLRun GLFW)
Wow,这很有效,谢谢你的帮助=)