Jam header file scanning test

本文介绍如何在Jam中实现根据源文件内容动态构建依赖的方法,通过设置特定变量激活header文件扫描,实现对头文件更新的自动编译。

Why

在使用Jam建立目标依赖的过程中,有时需要根据source的内容动态建立依赖,例如一个c/c++的源文件,一般#include其他文件,我们需要把#include也作为source加入到依赖里,这样的好处很明显,就是当头文件更新了我们也可以自动build target,并且不需要手动建立和维护这些对头文件的依赖。

How

Jam中有关header file searching的变量一共4个,分别是

  • HDRSCAN  - 一个egrep pattern,用于对文件进行按行search时使用,该patttern的第一个group的返回值作为source,将会被传递给HDRRULE
  • HDRRULE   - 当根据HDRSCAN找到一个依赖时,将会以$(HDRRULE) TARGET : SOURCE 的形式来调用
  • HDRGRIST - 由HDRRULE使用,用来grist一个target
  • HDRSEARCH – 指定搜索的source的搜索目录,类似于HDRS, STDHDRS

要让header file scanning在一个target上起作用,必须同时在这个target上设置HDRSCAN和HDRRULE这两个变量。最好不要设置这两个变量为全局变量,因为这样所有的target都会进行scanning。

我们来看一个例子,假定我们需要编译一个资源,这个资源文件里,会以INCLUDES "XXX"的形式包含其他的源文件,而我们需要找到XXX,并且建立这个依赖。

HDRSCAN

使用egrep的语法,就是HDRSCAN就应该是 INCLUDES[tab-space]+"(.+)",这里tab和space就是你对应的输入的字符,这里为了清楚而替代以文字表示。

Activate Scanning

激活header file scanning,必须设置2个变量HDRSCAN和HDRRULE 

HDRSCAN on $(SOURCE) = "INCLUDES[	 ]+/"(.+)/"" ;
HDRRULE on $(SOURCE) = CustomHDRRule ;
HDRGRIST on $(SOURCE) = $(SOURCE_GRIST:E=) ;
HDRSEARCH on $(SOURCE) = $(SEARCH_SOURCE) ;

CustomHDRRule是我们的HdrRule,用来建立target和source的依赖。

rule CustomHDRRule TARGET : SOURCE
{
    Includes $(TARGET) : $(SOURCE) ;
    SEARCH on $(SOURCE) = $(HDRSEARCH) ;
    NoCare $(SOURCE) ;

    if $(SOURCE:S) = .rc
    {
        HDRSCAN on $(SOURCE) = $(HDRSCAN) ;
        HDRRULE on $(SOURCE) = $(HDRRULE) ;
        HDRGIRST on $(SOURCE) = $(HDRGRIST) ;
        HDRSEARCH on $(SOURCE) = $(HDRSEARCH) ;
    }
}
这里我们只针对.rc的资源文件进行扫描,来看一下完整的Jamfile
SubDir TOP ;

rule CustomHDRRule TARGET : SOURCE
{
    Includes $(TARGET) : $(SOURCE) ;
    SEARCH on $(SOURCE) = $(HDRSEARCH) ;
    NoCare $(SOURCE) ;

    if $(SOURCE:S) = .rc
    {
        HDRSCAN on $(SOURCE) = $(HDRSCAN) ;
        HDRRULE on $(SOURCE) = $(HDRRULE) ;
        HDRGIRST on $(SOURCE) = $(HDRGRIST) ;
        HDRSEARCH on $(SOURCE) = $(HDRSEARCH) ;
    }
}

rule CompileRes PARENT : TARGET : SOURCE
{
    if ! $(TARGET) 
    {
        TARGET = $(SOURCE:S=) ;
    }

    TARGET = [ FGristFiles $(TARGET) ] ;
    SOURCE = [ FGristFiles $(SOURCE) ] ;
    Depends $(PARENT) : $(TARGET) ;
    Depends $(TARGET) : $(SOURCE) ;

    CompileRes_ $(TARGET) : $(SOURCE) ;
    Clean clean : $(TARGET) ;

    HDRSCAN on $(SOURCE) = "INCLUDES[	 ]+/"(.+)/"" ;
    HDRRULE on $(SOURCE) = CustomHDRRule ;
    HDRGRIST on $(SOURCE) = $(SOURCE_GRIST:E=) ;
    HDRSEARCH on $(SOURCE) = $(SEARCH_SOURCE) ;
}

actions CompileRes_
{
    cp $(>) $(<)
}

CompileRes all : : test.rc ;
这里编译test.rc文件为test,会扫描test.rc的内容,动态建立依赖。

下面是工程的源文件,有兴趣可以下载尝试一下。下载后把扩展名改为tar即可解压。

hdrrule.tar

内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练与应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化与训练,到执行分类及结果优化的完整流程,并介绍了精度评价与通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者与实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程与关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优与结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置与结果后处理环节,充分利用ENVI Modeler进行自动化建模与参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
### Jetty 启动时扫描文件出现错误的解决方案 当遇到 `error scanning file` 类型的错误时,通常是因为某些类文件或资源文件无法被正确解析。这类问题可能由多种原因引起,具体取决于项目的配置和使用的库。 #### 1. 升级 JAR 文件版本 如果项目中存在旧版本的第三方库(如 jaxen),可能会导致扫描异常。建议升级这些库到最新稳定版以解决问题[^3]: ```xml <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <version>1.2.0</version> <!-- 或更高 --> </dependency> ``` #### 2. 排除不必要的模块信息 对于 Java 9 及以上版本编译的JAR包中的 `module-info.class` 文件可能导致兼容性问题。可以在 pom.xml 中排除此类文件来规避此问题[^4]: ```xml <configuration> <webAppConfig> <metadataComplete>true</metadataComplete> </webAppConfig> </configuration> ``` #### 3. 处理损坏的 ZIP 文件 有时 Maven 下载过程中可能出现网络中断等情况造成部分依赖项下载不完全而形成破损ZIP文件。此时应清理本地仓库并重新构建工程[^2]: ```bash rm -rf ~/.m2/repository/* mvn clean install ``` #### 4. 调整 Jetty 插件版本 不同版本之间可能存在Bug修复与改进,尝试更新 jetty-maven-plugin 到较新版本可以有效减少潜在风险: ```xml <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.48.v20220622</version> <!-- 更新的版本号 --> </plugin> ``` #### 5. 修改操作系统环境设置 由于操作系统的差异也可能引发特定场景下的启动失败现象,在 Windows 平台上运行时需特别注意路径长度限制等问题,并考虑调整相关参数或切换至其他容器化工具部署应用.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值