#widgets #graphics

fltk-build

创建用于从 Rust 中使用的本地 fltk/cfltk 模块

2 个版本

0.1.1 2021 年 12 月 3 日
0.1.0 2021 年 11 月 21 日

#169 in #widgets


2 个 crate 中使用 (通过 fltk-flow)

MIT 许可证

10KB
100

fltk-build

允许创建本地 C/C++ fltk/cfltk 模块,以便从 Rust 中使用。这是通过从系统上构建的 fltk-sys crate 中公开包含路径和库路径来实现的。

用法

[dependencies] # or [dev-dependencies]
fltk = "1.2.17" # this won't work with fltk-bundled
# You might need fltk-sys and paste if you use fltk's trait macros

[build-dependencies]
fltk-build = "0.1"
fltk-sys = "1.2.17"
cc = "1" # or cmake = "0.1"

示例

build.rs (使用 cc)

use fltk_build::fltk_out_dir;

fn main() {
    let fltk_out_dir = fltk_out_dir().unwrap();

    cc::Build::new()
        .file("src/my_wid.cpp")
        .cpp(true)
        .flag_if_supported("-w")
        .flag_if_supported("-fno-rtti")
        .include(&fltk_out_dir.join("include"))
        .compile("my_wid");
}

build.rs (使用 cmake-rs)

use std::env;
use std::path::PathBuf;
use fltk_build::fltk_out_dir;

fn main() {
    let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
    let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap();
    let fltk_out_dir = fltk_out_dir().unwrap();

    cmake::Config::new("src")
    .define(
        "CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES",
        fltk_out_dir.join("include"),
    )
    .build();

    println!(
        "cargo:rustc-link-search=native={}",
        out_dir.display()
    );
    println!("cargo:rustc-link-lib=static=my_wid");

    match target_os.as_str() {
        "windows" => (), // doesn't need explicit linking to the C++ stdlib
        "macos" => println!("cargo:rustc-link-lib=c++"),
        _ => println!("cargo:rustc-link-lib=stdc++"),
    }
}

在您的 C/C++ 文件中,您可以直接访问 FLTK 和 cfltk 头文件

#include <cfl/cfl_window.h>
#include <FL/Fl_Window.H>

如果您使用 CMake,一个最小的 CMakeLists.txt 示例

cmake_minimum_required(VERSION 3.0)
project(wid)

if (NOT MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions")
endif()

add_library(my_wid my_wid.cpp)

install(TARGETS my_wid DESTINATION ${CMAKE_INSTALL_PREFIX})

使用 fltk-build 的示例 crate(未在 crates.io 上发布):https://github.com/fltk-rs/fltk-flow

无运行时依赖

特性