check: gen
# ls -ltr file_name*
ifeq ($(shell test -s file_name && echo -n yes),yes)
Do something with file_name and file_name1
else
Do something else with file_name1
endif
# Will generate file_name and file_name1. Depending on the implementation , file_name can be empty sometimes.
gen:
<some command to generate file_name and file_name1>
clean:
-rm -rf file_name*
Run Code Online (Sandbox Code Playgroud)
当我执行make checkwithout时make clean,make check总是返回“Hello contains”。
执行 amake clean然后执行 a make check,它不会返回“Hello contains”。
注意:在这两种情况下,ls -ltringen都会返回非空文件打印。
ifeq ($(shell test -e file_name && echo -n yes),yes)\nRun Code Online (Sandbox Code Playgroud)\n在 Make 读取 Makefile 时进行评估,而不是在运行命令时进行评估。因此,如果file_name读取 Makefile 时存在,则check目标将运行echo "Hello exists",否则它将运行\xe2\x80\x99t。
Makefile 实际上应该尽可能地用文件来描述;根据您的情况,check需要file_name和file_name1,以便 \xe2\x80\x99s 应该指定:
ifeq ($(shell test -e file_name && echo -n yes),yes)\nRun Code Online (Sandbox Code Playgroud)\n检查本身可以涉及您可以在 shell 中运行的任何命令,包括对文件的测试,但是您可以\xe2\x80\x99t 根据 Makefile\xe2\x80\x99s 处理期间更改的条件来制作 Makefile 的某些部分(至少,不容易)。对于你的情况,你可以做类似的事情
\ncheck: file_name file_name1\n <run your checks>\n\nfile_name file_name1:\n <some command to generate file_name and file_name1>\n\nclean:\n rm -f file_name file_name1\nRun Code Online (Sandbox Code Playgroud)\n或者更明确地说,使用转义符,因为这需要在单个 shell 调用中运行:
\ncheck: file_name file_name1\n test -s file_name && <do something with both files>\n ! test -s file_name && <do something with only file_name1>\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
20905 次 |
| 最近记录: |