我有一个文本文件,其中一些单词打印在所有大写.我希望能够将文本文件中的所有内容转换为小写,使用sed.这意味着第一句话将会读到,'我有一个文本文件,其中一些单词都打印在所有大写字母中.'
我正在编写一个在一个地方进行字符串匹配的Makefile,代码如下:
if test ...; \
then \
shell scripts... \
fi
ifeq ($(DIST_TYPE),nightly)
shell scripts ...
endif
Run Code Online (Sandbox Code Playgroud)
这里第一个if是shell脚本,第二个ifeq是GNU Make的条件.但是会生成以下错误:
ifeq(每晚,每晚)
/ bin/sh:-c:第0行:意外令牌附近的语法错误`每晚,每晚'
/ bin/sh:-c:第0行:`ifeq(每晚,每晚)'
这里发生了什么事?似乎Make正试图调用shell.
谢谢.
是否可以创建一个可由make解释的可执行脚本?
我试过这个:
#!/usr/bin/env make --makefile=/dev/stdin
main:
@echo Hello!
Run Code Online (Sandbox Code Playgroud)
但它不起作用 - 挂起直到按下Ctrl-c.
PLATFORM = x86
CUD = cuda
X86 = x86
PAN = panda
ARM = arm
app:
ifeq($(PLATFORM),$(CUD))
CC = dum3
endif
ifeq($(PLATFORM), $(X86))
CC = gcc
endif
ifeq($(PLATFORM),$(PAN))
CC = dum1
endif
ifeq($(PLATFORM),$(ARM))
CC = dum2
endif
$(CC) -o ./Executable/list ./Source/ll_main.c ./Library/liblst.a
./Executable/list
Run Code Online (Sandbox Code Playgroud)
当我这样做它显示错误....语法错误:字意外(期待")")?
Plzz ..帮助..
我只是偶然发现了这个问题.我试着写一个非常基本的Makefile目标:
core: myprogram
ulimit -c 10000
./myprogram
ulimit -c 0
Run Code Online (Sandbox Code Playgroud)
我们的想法是将核心大小限制设置为适当的值,使程序崩溃,然后将核心大小限制重置为零.当我调用此规则时,我收到以下错误消息:
$ make core
cc -Wall -Wextra -m32 -g -o example example.c
ulimit -c 100000
make: ulimit: Command not found
make: *** [core] Error 127
Run Code Online (Sandbox Code Playgroud)
首先,我有点惊讶,但我认为这个问题来自于ulimit内置shell 的事实.而且,令人惊讶的是(至少对我而言),这些内置函数无法从a调用Makefile.
此外,ulimit既可以是仅一个内置函数(它是这种情况在我的Debian)或仅一个二进制程序(/usr/bin/ulimit).
所以,我的问题很简单,如何以优雅和可移植的方式解决这个问题,并从Makefile内部调用内置函数?
下面的代码在 ptxdist Makefile 中工作,但想知道是否有更好的解决方案来检查在继续构建之前是否安装了所有必需的软件包?
ENV_VERIFICATION:
@echo ------------START ENV VERIFICATION---------------
if ! dpkg -s sudo | grep Status | grep -q installed; then \
echo ERROR: sudo package not installed!; \
exit 1; \
fi
if ! dpkg -s scons | grep Status | grep -q installed; then \
echo scons package not installed!; \
exit 1; \
fi
@echo ------------END ENV VERIFICATION---------------
Run Code Online (Sandbox Code Playgroud)
我可以在我的系统中运行以下命令,最好在 make 日志中打印相同的命令,任何有助于改进上述代码并在日志中打印以下输出(如果安装了包)的帮助都是值得赞赏的。提前致谢!
$ dpkg-query -W -f='${Package} ${Status}\n' sudo
sudo install ok installed
Run Code Online (Sandbox Code Playgroud) 我使用shell(bash,但我需要可移植性)和GNU Makefile.我有这个代码:
check_commands:
command -v find >/dev/null
command -v asdf >/dev/null
Run Code Online (Sandbox Code Playgroud)
假设,第一个命令被传递,第二个命令中止Makefile并出错.现在,我删除了>/dev/null.那为什么呢
check_commands:
command -v find
Run Code Online (Sandbox Code Playgroud)
产生以下错误?
make: command: Command not found.
Run Code Online (Sandbox Code Playgroud) 我想创建一个 Makefile 来识别系统中是否存在给定的程序,如果不存在则运行另一个目标(或命令)。请阅读我在问题末尾的脚本(PS),然后将其标记为重复。
总之,我想做如下伪代码:
if (myProgram.exists()):
myProgram arg0 arg1 arg2
else:
otherProgram arg0 arg1 arg2 #suppose that otherProgram will always exists
Run Code Online (Sandbox Code Playgroud)
我已经按照this SO question的最佳答案尝试了一些解决方案,这告诉我做这样的事情:
check: ; @which myProgram > /dev/null
mytarget: check
myProgram arg0 arg1 arg2
Run Code Online (Sandbox Code Playgroud)
该解决方案实际上有效,但这会中止程序而不是执行另一个 makefile target / command。我尝试了很多不同的实现,但没有一个解决了我的问题。
PS:这个问题不是“检查Makefile中的程序是否存在”的重复问题,因为后者旨在如果程序不存在则停止执行,而前者旨在如果程序不存在则运行另一个目标存在。