如何使用 CMake 链接 Clion 中的库?

问题描述 投票:0回答:1

我正在尝试用 C 显示图形,为此我想链接 SDL 库,但这是我第一次做这样的事情,我发现的一切都没有帮助。

我发现我显然需要链接 CMake 中的库,但我看到人们的做法完全不同,而且似乎没有一个对我有用。

我在 Windows 上,如果这很重要的话

这是我当前的 CMake 文件:

cmake_minimum_required(VERSION 3.26)
project(SDLtest C)

set(CMAKE_C_STANDARD 11)

add_executable(SDLtest main.c)

target_include_directories (SDLtest PUBLIC include/SDL2)
find_library(SDL_LIBRARY SDLtest lib)
target_link_libraries(SDLtest LINK_PUBLIC ${TEST_LIBRARY})

这是我正在使用的测试代码:

#include <stdio.h>
#include "SDL.h"

int SDL_main(int argc, char* argv[]){
    SDL_Init(SDL_INIT_EVERYTHING);   // Initialize SDL2
    SDL_Window *window;        // Declare a pointer to an SDL_Window
    // Create an application window with the following settings:
    window = SDL_CreateWindow(
            "An SDL2 window",                  //    window title
            SDL_WINDOWPOS_UNDEFINED,           //    initial x position
            SDL_WINDOWPOS_UNDEFINED,           //    initial y position
            640,                               //    width, in pixels
            480,                               //    height, in pixels
            SDL_WINDOW_SHOWN|SDL_WINDOW_OPENGL //    flags - see below
    );// Check that the window was successfully made
    if(window==NULL){
        // In the event that the window could not be made...
        printf("could not create window: %s\n", SDL_GetError());
        return 1;
    }
    SDL_Event event;
    while(1){
        SDL_WaitEvent(&event);
        switch (event.type) {
            case SDL_QUIT : SDL_DestroyWindow(window); SDL_Quit(); break;
            default : break;
        }
    }
}

这些是我遇到的错误(不是所有错误,因为它们是相同的,而且只会占用空间):

C:\Program Files\JetBrains\CLion 2023.2.1\bin\mingw\bin/ld.exe: C:/Projects/SDLtest/main.c:25: undefined reference to `SDL_DestroyWindow'

C:\Program Files\JetBrains\CLion 2023.2.1\bin\mingw\bin/ld.exe: C:/Projects/SDLtest/main.c:25: undefined reference to `SDL_Quit'

C:\Program Files\JetBrains\CLion 2023.2.1\bin\mingw\bin/ld.exe: C:/Program Files/JetBrains/CLion 2023.2.1/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crtexewin.o):crtexewin.c:(.text+0x130): undefined reference to `WinMain'

这是我的文件结构: clion file structure

如果我错过了任何重要的事情,那是因为我不知道,任何帮助将不胜感激

c cmake sdl clion undefined-reference
1个回答
0
投票

我在一些帮助下让它工作,这就是我需要做的:

已更换

find_library(SDL_LIBRARY SDLtest lib)

find_library(SDL_LIBRARY NAMES libSDL2 libSDL2main HINTS "${CMAKE_CURRENT_SOURCE_DIR}/lib")

在我的 cmake 文件中,对此有一些解释:


SDL_LIBRARY 是我在这里创建的变量的名称,这就是我将放入 targer_link_libraries() 中的内容(请参阅问题),然后 NAMES 是我需要的库文件的名称,在本例中libSDL2 和 libSDL2main,HINTS 后面是这些文件的路径,${CMAKE_CURRENT_SOURCE_DIR} 获取 CMake 文件所在目录的路径,在我的例子中,库位于该目录的 /lib 子目录中


这就是他妈的开始的地方,这让我的 CMake 文件可以工作,但我的代码仍然无法编译,因为出现错误:

undefined reference to WinMain()
这是通过将我的
int SDL_main(int argc, char* argv[])
函数重命名为
int WinMain(int argc, char* argv[])
来修复的,但我相当老实说,我不以任何方式理解这部分,所以我不知道这是否会导致以后出现问题,或者是什么原因导致的。

© www.soinside.com 2019 - 2024. All rights reserved.