cmake - 如何在 Clion 项目中包含 SDL_gfx 库?
问题描述
所以我遇到了一件奇怪的事情,我可以让 SDL2 库在 clion 中工作,但如果我包含 SDL_gfx 库,它将无法编译。
所以这是我到目前为止所做的:
- 我从网站上下载了Windows 64版本的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 可以看到它,并且在我点击编译之前它看起来很正常:
如果我的代码是:
#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;
}
比它有效。它编译并出现空白窗口。但是如果我从注释中删除这三行,那么它不会编译,我会得到下一个错误:
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
奇怪的是,clion可以看到这些circleRGBA函数,在这张图中我们可以看到它可以识别函数,它在变量旁边写了属性。
解决方案
不幸的是 SDL_gfx 没有标准的 cmake 模块。但是你可以通过谷歌搜索在互联网上找到一个FindSDL2_gfx.cmake
。将此文件放在您的cmake/Modules
目录中。
find_package(SDL2_gfx REQUIRED)
然后${SDL2_GFX_LIBRARIES}
用于链接
推荐阅读
- html - BeautifulSoup 中未显示特定“div”下的内容
- javascript - 在特定的复选框选择上触发页面重新加载
- flutter - 如何在颤振中从 API 获取字符串值?
- react-native - 如何使用功能组件做一个简单的不透明动画并反应原生复活
- python - 在查询字符串中传递“元组”以在 REST API 中进行过滤
- javascript - 在电子反应应用程序中多次触发 NodeJS 事件
- php - 如何修复错误在 Laravel 中获取数据
- angular - PDF查看器并使用角度在网页中添加注释
- linux - (DPDK)如何将pcap文件发送给receiver,并在receiver端生成一个精确的pcap文件?
- html - 将汉堡图标添加到现有导航菜单