Cmake 如何在Clion项目中包含SDL_gfx库?

Cmake 如何在Clion项目中包含SDL_gfx库?,cmake,sdl-2,Cmake,Sdl 2,所以我遇到了一件奇怪的事情,我可以让SDL2库在clion中工作,但是如果我包括SDL_gfx库,它就不会编译 以下是我到目前为止所做的: 我已经从网站下载了Windows64版本的SDL,解压缩了它,并将文件拖到了相应的MinGW文件夹中 我已经编辑了cmake文件,这样clion也可以看到它,它真的很有效 我的cmake文件: cmake_minimum_required(VERSION 3.15) project(pontok C) set(CMAKE_C_STANDARD 99) s

所以我遇到了一件奇怪的事情,我可以让SDL2库在clion中工作,但是如果我包括SDL_gfx库,它就不会编译

以下是我到目前为止所做的:

  • 我已经从网站下载了Windows64版本的SDL,解压缩了它,并将文件拖到了相应的MinGW文件夹中
  • 我已经编辑了cmake文件,这样clion也可以看到它,它真的很有效

    我的cmake文件:

    cmake_minimum_required(VERSION 3.15)
    project(pontok C)
    
    
    set(CMAKE_C_STANDARD 99)
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")
    
    find_package(SDL2 REQUIRED)
    
    add_executable(pontok main.c)
    
    include_directories(${SDL2_INCLUDE_DIR}
            ${SDL2_IMAGE_INCLUDE_DIR}
            ${SDL2_MIXER_INCLUDE_DIR}
            )
    
    target_link_libraries(pontok ${SDL2_LIBRARY}
            ${SDL2_IMAGE_LIBRARY}
            ${SDL2_MIXER_LIBRARY}
            )
    
  • 我已经从下载了SDL_gfx包,并将.h和.a文件放在相应的MinGW文件夹中。Clion可以看到它,在我点击compile之前它看起来很正常:

  • 如果我的代码是:

    #include <stdio.h>
    #include <math.h>
    #include <SDL2\SDL2_gfxPrimitives.h>
    #include <SDL2\SDL.h>
    
    const int SCREEN_WIDH = 640;
    const int SCREEN_HEIGHT = 480;
    
    int main(int argc, char *argv[]) {
        if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
            SDL_Log("Nem indithato az SDL: %s", SDL_GetError());
            exit(1);
        }
        SDL_Window *window = SDL_CreateWindow("SDL peldaprogram", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 440, 360, 0);
        if (window == NULL) {
            SDL_Log("Nem hozhato letre az ablak: %s", SDL_GetError());
            exit(1);
        }
        SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);
        if (renderer == NULL) {
            SDL_Log("Nem hozhato letre a megjelenito: %s", SDL_GetError());
            exit(1);
        }
        SDL_RenderClear(renderer);
    
        int x, y, r;
    
        //circleRGBA(renderer, x, y, r, 255, 0, 0, 255);
        //circleRGBA(renderer, x + r, y, r, 0, 255, 0, 255);
        //circleRGBA(renderer, x + r * cos(3.1415 / 3), y - r * sin(3.1415 / 3), r, 0, 0, 255, 255);
    
        SDL_RenderPresent(renderer);
    
        SDL_Event ev;
        while (SDL_WaitEvent(&ev) && ev.type != SDL_QUIT) {
        }
    
        SDL_Quit();
        return 0;
    }
    

    奇怪的是,clion可以看到这些circleRGBA函数,我们可以看到它可以识别函数,它在变量旁边写入属性。

    不幸的是,SDL_gfx没有标准的cmake模块。但是你可以通过谷歌搜索
    FindSDL2\u gfx.cmake
    在互联网上找到一个。将此文件放在
    cmake/Modules
    目录中

    查找包(需要SDL2\U gfx)


    然后使用
    ${SDL2\u GFX\u LIBRARIES}
    进行链接

    好的,我就知道了。问题是clion看不到.c sdl2u gfx文件,因此我不得不将它们添加到项目中,并在CMakeList.txt中编辑以下行:

    add\u可执行文件(pontok main.c SDL2\u framerate.c SDL2\u gfexperiments.c SDL2\u imageFilter.c SDL2\u rotozoom.c)


    通过这种方式,它可以正常编译和工作。

    您是否尝试过在
    目标链接库()中使用
    ${SDL2\u库}
    而不是
    ${SDL2\u库}
    命令(请参见此)?这将有助于查看链接器正在使用(或未使用)的库,请尝试运行
    make VERBOSE=1
    以查看完整的链接器输入。@squareskittles这没有帮助,与mingw相同的错误,您不应该有.dll而不是.a库吗?
    CMakeFiles\pontok.dir/objects.a(main.c.obj): In function `SDL_main':
    C:/Prog/pontok/main.c:28: undefined reference to `circleRGBA'
    C:/Prog/pontok/main.c:29: undefined reference to `circleRGBA'
    C:/Prog/pontok/main.c:30: undefined reference to `circleRGBA'
    collect2.exe: error: ld returned 1 exit status
    mingw32-make.exe[3]: *** [CMakeFiles\pontok.dir\build.make:88: pontok.exe] Error 1
    mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:75: CMakeFiles/pontok.dir/all] Error 2
    mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/pontok.dir/rule] Error 2
    mingw32-make.exe: *** [Makefile:117: pontok] Error 2