windows环境下使用CLion+MinGW配置fltk开发环境

发布时间:2024年01月13日

操作系统:windows 10
CLion版本:2023.3.1
使用CLion Bundled MinGW Version:11.0 w64
CMake version:3.27.0
G++ version:13.1.0

1 编译fltk静态库

这里使用的fltk版本为1.4.0。
下载到fltk源码后,通过命令行打开fltk源码目录,或者使用CLionfltk源码目录打开为工程,然后进入到终端中。
在终端命令行中新建build/目录并进入到build/目录下:

mkdir build/ && cd build/

使用cmake构建,如果不指定生成器会使用电脑中的默认生成器,根据需要选择自己使用的生成器,因为后面要使用CLion基于MinGW开发,所以指定生成器为MinGW

cmake -G "MinGW Makefiles" ../

构建完成后执行直接执行make

make

等待编译完成,在build/lib/目录下会有编译好的libfltk.a文件。

2 运行fltk第一个例子

在磁盘上另外新建一个文件夹project/作为例子工程目录,在project/中新建src/include/FLlib/

将上一步编译好的libfltk.a文件拷贝到lib/中,将上一步fltk源码目录中的FL/目录下的所有.h文件拷贝到project/include/FL目录中,再将build/FL目录下fl_config.h拷贝到project/include/FL目录下。

src/目录下新建main.cpp文件,编辑以下代码:

#include <iostream>
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>

int main(int argc, char *argv[]) {
    Fl_Window *window;
    Fl_Box *box;
    window = new Fl_Window(300, 180);
    window->label("HelloWorld!");
    box = new Fl_Box(20, 40, 260, 100, "Hello World!");
    box->box(FL_UP_BOX);
    box->labelsize(36);
    box->labelfont(FL_BOLD + FL_ITALIC);
    (FL_SHADOW_LABEL);
    window->end();
    window->show(argc, argv);
    return Fl::run();
}

src/目录下创建CMakeLists.txt文件,编辑以下代码:

cmake_minimum_required(VERSION 3.27)
project(fltk_dist LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)

include_directories(../include)

link_directories(../lib)

file(GLOB SRC
        src/*.h
        src/*.cpp
)


add_executable(
        ${PROJECT_NAME}
        main.cpp
)

target_link_libraries(
        ${PROJECT_NAME}
        fltk
        ws2_32
        User32
        comctl32
        GdiPlus
)

点击CLion中的运行,出现hello world窗口。

3 可能会出现的问题

在点击运行后,构建信息出现undefined reference XXX的错误信息,一般是链接静态库是找不到对应的静态库,所有一下报错信息找到对应的静态库,然后加在CMakelists.txt中的target_link_libraries中。

开始使用的是环境中g++编译的fltk静态库,在后面使用CLion自带的g++构建程序,由于两个g++版本不一致,导致在构建应用时也会报undefined reference XXX的错误,后来用CLion自带的g++重新编译静态库问题解决。

文章来源:https://blog.csdn.net/u014536323/article/details/135562275
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。