首页 > 解决方案 > 如果没有更改,则跳过 DLL 编译

问题描述

我正在尝试为我们这里的应用程序优化我们的构建过程。如果文件时间戳没有使用 Netbeans Ant 脚本更改,我想跳过我们的后端 .dll 文件的编译。我一直在使用使用 Ant高级自由形式项目配置作为参考点的增量和快速构建,但似乎需要 2 个构建目标才能在第一个链接中创建 .timestamp 比较。

有没有办法绕过对 2 个目标的需求,而是检查 .dll 文件的时间戳?还是我只需要在我的调用中添加另一个标签来进行比较,还是我试图做的事情不可行?任何帮助将不胜感激,或者如果知道更好的方法,我愿意倾听。
我们使用 Netbeans 编译我们的项目,并且默认使用 Ant。到目前为止,我已经包含了我的 build.xml Ant 脚本的一个片段。
提前致谢!

<target name="init-skip-dll" description="initializes the skip property for the Ada dll">
    <uptodate srcfile="create-ada-dll.timestamp" targetfile="ada-dll.timestamp" property="ada-dll.skip" value="true" />
</target>

<target name="-build-dll" description="builds the Ada dll if needed" depends="init-skip-dll">
    <exec executable="gprbuild.exe">
        <arg value="-P"/>
        <arg file="..\DLL\ifccs_dll.gpr"/>
    </exec>
    <touch file="create-ada-dll.timestamp"/>
</target>

标签: javaoptimizationnetbeansantada

解决方案


我不使用 Ant,但 Make 也存在同样的问题;Ada 依赖规则很复杂,最好通过无条件地让 gprbuild 做任何事情来更新 DLL。如果 DLL 实际上是最新的,Gprbuild 除了检查依赖关系之外什么都不做。

在 Make 中,这涉及到一个虚假的目标:例如,对于一个真实的目标testbed

testbed: force
        gprbuild -p -P testbed

.PHONY: force

或者对于已经是假的目标

all:
        gprbuild -p -P build_runtime.gpr

.PHONY: all

顺便说一句,请注意-p,它表示创建所需的目录,例如对象目录。


推荐阅读