相关疑难解决方法(0)

操作系统检测makefile

我经常在几台不同的计算机和几种不同的操作系统上工作,这些操作系统是Mac OS X,Linux或Solaris.对于我正在进行的项目,我从远程git存储库中提取代码.

无论我在哪个终端,我都希望能够处理我的项目.到目前为止,我已经找到了通过每次切换计算机时更改makefile来绕过操作系统更改的方法.然而,这是乏味的,并引起一堆头痛.

如何修改我的makefile,以便它检测我正在使用哪个操作系统并相应地修改语法?

这是makefile:

cc = gcc -g
CC = g++ -g
yacc=$(YACC)
lex=$(FLEX)

all: assembler

assembler: y.tab.o lex.yy.o
        $(CC) -o assembler y.tab.o lex.yy.o -ll -l y

assembler.o: assembler.c
        $(cc) -o assembler.o assembler.c

y.tab.o: assem.y
        $(yacc) -d assem.y
        $(CC) -c y.tab.c

lex.yy.o: assem.l
        $(lex) assem.l
        $(cc) -c lex.yy.c

clean:
        rm -f lex.yy.c y.tab.c y.tab.h assembler *.o *.tmp *.debug *.acts
Run Code Online (Sandbox Code Playgroud)

makefile os-agnostic os-detection

237
推荐指数
10
解决办法
15万
查看次数

什么是Windows命令shell相当于Bash的`true`命令?

我编写了一个Vim插件,用于运行外部命令.我运行的两个命令是diff,grep在"正常"操作期间,每个命令都可以使用非零退出代码退出.

(diff当它找到差异时grep退出退出代码1,当找不到匹配时退出退出代码1.)

出于我的Vimscript的目的,我需要从这些命令返回退出代码0.到目前为止,我正在构建这样的命令:

diff a b || true
Run Code Online (Sandbox Code Playgroud)

和:

grep foo bar || true
Run Code Online (Sandbox Code Playgroud)

这适用于OS X,它显然适用于一些Windows用户.但是,当我通过VirtualBox在OS X上运行Windows 7时,使用Git安装程序安装的Bash,我收到错误消息:

'true'不被识别为内部或外部命令,可操作程序或批处理文件.

在Windows上使用的正确的successful-no-op命令是什么?

git bash shell cmd

13
推荐指数
4
解决办法
5921
查看次数

禁止make规则错误输出

我有一个创建目录的规则

bin:
    -mkdir $@
Run Code Online (Sandbox Code Playgroud)

但是,在第一次生成目录后,我收到此输出:

mkdir bin
mkdir: cannot create directory `bin': File exists
make: [bin] Error 1 (ignored)
Run Code Online (Sandbox Code Playgroud)

是否有某些方法我只能在目录不存在时运行规则,或者在目录已存在时禁止输出?

makefile gnu-make

11
推荐指数
3
解决办法
1万
查看次数

标签 统计

makefile ×2

bash ×1

cmd ×1

git ×1

gnu-make ×1

os-agnostic ×1

os-detection ×1

shell ×1