我有一个很大的遗留代码库,包含非常复杂的makefile,有很多变量.有时我需要改变它们,我发现很难弄清楚为什么改变不按照我的预期运作.我想找到的是一个基本上对"make"过程进行逐步调试的工具,我会给它一个目录,我将能够在不同的点看到不同变量的值.处理.没有任何调试标志似乎能告诉我我想要什么,虽然我可能会遗漏一些东西.有谁知道这样做的方法?
几年前,我阅读了Recursive Make Considered Harmful论文,并在我自己的构建过程中实现了这个想法.最近,我阅读了另一篇关于如何实现非递归的文章make.所以我有一些数据点,非递归make适用于至少几个项目.
但我很好奇别人的经历.你尝试过非递归make吗?它让事情变得更好还是更糟?值得的时间吗?
在makefile中,我可以从另一个规则调用规则吗?
相近:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
Run Code Online (Sandbox Code Playgroud) 在Visual Studio 2008中使用GCC而不是VC++有多难?显然,某些关键字不匹配,有些可能无法获得语法突出显示(除非您创建了新的语言服务).
这是一个'makefile项目',几乎是什么?
我正在编写一个在一个地方进行字符串匹配的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.
谢谢.
我通过CMAKE_C_FLAGS在CMake中设置了CFLAGS.是这样设置LDFLAGS?
我正在使用make和tar备份.执行makefile时,tar命令显示file changed as we read it.在这种情况下,
--ignore-failed-read没有帮助.我在MinGW中使用tar 1.23如何在警告后停止tar的警告以停止备份?
编辑-2:可能是原因
正如我上面所说,bash shell脚本在我的旧计算机中运行良好.与旧计算机相比,msys版本不同.tar命令的版本也是如此.在旧计算机中,tar为1.13.19,在新计算机中为1.23.我复制了旧的tar命令,而没有将其依赖项msys-1.0.dll复制到新计算机并将其重命名为tar_old.我还在shell脚本中更新了tar命令并运行脚本.一切都好.所以,似乎问题是tar命令.我确信在去皮时没有任何文件被更改.这是新版本中tar命令的错误吗?我不知道.
编辑-1:添加更多详细信息
备份由bash shell脚本调用.它扫描目标目录并构建makefile然后调用make以使用tar命令进行备份.接下来是由bash shell脚本构建的典型makefile.
#--------------------------------------------
# backup VC
#--------------------------------------------
# the program for packing
PACK_TOOL=tar
# the option for packing tool
PACK_OPTION=cjvf
# M$: C driver
WIN_C_DIR=c:
# M$: D driver
WIN_D_DIR=d:
# M$: where the software is
WIN_PRG_DIR=wuyu/tools
# WIN_PRG_DIR=
# where to save the backup files …Run Code Online (Sandbox Code Playgroud) 我正在使用GNU-make Makefile来构建一个包含多个目标(all和clean,以及一些项目特定目标)的C项目.在调试过程中,我想在没有永久编辑Makefile的情况下将一些标志附加到单个构建中(例如,添加调试符号或设置预处理器标志).
在过去,我做了如下(使用调试符号示例):
make target CFLAGS+=-g
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并没有附加到CFLAGS变量,而是清除它并阻止它编译.是否有这样做没有确定某种形式的虚拟变量追加到年底的清洁方式CFLAGS和LDFLAGS?
我想在使用a进行构建过程时打印一些消息makefile.下面的一个可以打印消息,但它不会在它之后执行脚本.我该如何解决这个问题?
ifeq (yes, ${TEST})
CXXFLAGS := ${CXXFLAGS} -DDESKTOP_TEST
test:
@echo '************ TEST VERSION ************'
else
release:
@echo "************ RELEASE VERSIOIN **********"
endif
Run Code Online (Sandbox Code Playgroud)