我有一个生成的makefile,然后调用另一个makefile.由于这个makefile调用更多makefile来完成工作,因此它并没有真正改变.因此,它一直认为项目是建立和最新的.
dnetdev11 ~ # make
make: `release' is up to date.
Run Code Online (Sandbox Code Playgroud)
如何强制makefile重建目标?
clean = $(MAKE) -f ~/xxx/xxx_compile.workspace.mak clean
build = svn up ~/xxx \
$(clean) \
~/cbp2mak/cbp2mak -C ~/xxx ~/xxx/xxx_compile.workspace \
$(MAKE) -f ~/xxx/xxx_compile.workspace.mak $(1) \
release:
$(build )
debug:
$(build DEBUG=1)
clean:
$(clean)
install:
cp ~/xxx/source/xxx_utility/release/xxx_util /usr/local/bin
cp ~/xxx/source/xxx_utility/release/xxxcore.so /usr/local/lib
Run Code Online (Sandbox Code Playgroud)
注意:删除名称以保护无辜者
编辑:最终修正版:
clean = $(MAKE) -f xxx_compile.workspace.mak clean;
build = svn up; \
$(clean) \
./cbp2mak/cbp2mak -C . xxx_compile.workspace; \
$(MAKE) -f xxx_compile.workspace.mak $(1); \
.PHONY: release debug clean …Run Code Online (Sandbox Code Playgroud) 我想将带有源的目录与带有目标的目录分开。似乎从 Makefile 更改当前工作目录应该是最简单的解决方案。
由于以下缺点,明确的目标路径是不够的:
另请参阅Pauls 的规则 #3:
如果目标构建在当前工作目录中,那么生活是最简单的。
关于 VPATH——我也同意要求开发人员“在运行 make 之前切换到目标目录是一种痛苦”。
我想要实现的第四字VALUE和TO(在仿真计算机一个RPC/8 的Minecraft MOD).只要我在编译时不使用它,我最好的尝试就会给我一组工作正常的单词.更具体的VALUE工作,但TO没有.
: VALUE CREATE , DOES> @ ;
: TO ' 3 + ! ;
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切我能想到的工作,我的最佳尝试让我得到了这个:
['] NameOfAValue 3 + !
Run Code Online (Sandbox Code Playgroud)
需要注意的是该处理器是不是一个纯粹的6502,但一个65EL02的自定义变种65816.
编辑#1:不知怎的,我忘了调用CREATE的价值.应该一直都在那里.编辑#2:我也有3和+在TO调换了...哎呀.它本来应该是另一种方式.
当我在Forth的堆栈上给出一个数字时,我试图实现一个从数组中生成字符串的单词.
我的第一次天真尝试是:
create myarray s" Alpha" , s" Beta" , s" Charlie" ,
Run Code Online (Sandbox Code Playgroud)
这被接受,但它没有按预期工作 - myarray @ type产生不一致的输出(而不是我天真的期望它可能打印"Alpha").
在网上搜索时,我在Gforth文档中发现创建的字符串s"具有有限的生命周期,这意味着我的ansatz必然会从一开始就失败.另一方面,根据Len的Forth Tutorial 中的Fours部分中的数组,即使是常规对象的数组似乎也没有标准化.
<Update>显然,这对Forth来说不是一个小问题.Web上有一些库实现了缺少的字符串功能:FFL(str模块)和Bernd Paysan的字符串函数.这是一个很好的起点,虽然它仍然需要工作从那里到一个字符串数组.</更新>
那么如何实现一个从给定数组返回字符串的单词呢?
默认情况下,Forth 只有少量的工作库,所以一切都必须从头开始编程。原因是,基于堆栈的 Forth 虚拟机将自己标识为一个超薄系统。
根据 Gforth 手册,可以使用现有的 C 库并访问用 C 编写的预编译图形库和游戏引擎。 C项目。
我从头开始用 C 创建了一个库。它提供了一个 add 函数,可以从主程序中调用。这些文件被编译和链接,它工作正常。
### add.c ###
int add(int a, int b) {
return a + b;
}
### add.h ###
int add(int, int);
### main.c ###
#include <stdio.h>
#include "add.h"
void main() {
printf("5 + 7 = %d\n", add(5,7));
}
### compile ###
gcc -c -fPIC add.c
gcc -c main.c
gcc main.o add.o
./a.out
5 + 7 = 12
Run Code Online (Sandbox Code Playgroud)
计划是使用这个来自 Forth 的预编译 c 库。Gforth 编译器为此提供了一个特殊的关键字,它将 Forth …
阅读 Gforth 手册,可以使用单词 来更改值TO,那么它与变量有何不同?
我想要一个像这样的词
read-site ( add n buff max -- n flag )
Run Code Online (Sandbox Code Playgroud)
其中“add n”是站点名称缓冲区,“buff max”是应读取 ASCII 文本的缓冲区,“n”是读取的字节数,flag如果操作成功则为 true。
这在 Linux、Android 或 Windows 的 Gforth 中可能吗?