标签: makefile

用于调试makefile的工具

我有一个很大的遗留代码库,包含非常复杂的makefile,有很多变量.有时我需要改变它们,我发现很难弄清楚为什么改变不按照我的预期运作.我想找到的是一个基本上对"make"过程进行逐步调试的工具,我会给它一个目录,我将能够在不同的点看到不同变量的值.处理.没有任何调试标志似乎能告诉我我想要什么,虽然我可能会遗漏一些东西.有谁知道这样做的方法?

debugging makefile

62
推荐指数
4
解决办法
5万
查看次数

您对非递归制作的体验是什么?

几年前,我阅读了Recursive Make Considered Harmful论文,并在我自己的构建过程中实现了这个想法.最近,我阅读了另一篇关于如何实现非递归的文章make.所以我有一些数据点,非递归make适用于至少几个项目.

但我很好奇别人的经历.你尝试过非递归make吗?它让事情变得更好还是更糟?值得的时间吗?

build-process makefile

62
推荐指数
7
解决办法
2万
查看次数

make:规则调用规则

在makefile中,我可以从另一个规则调用规则吗?

相近:

rule1:
        echo "bye"
rule2:
        date
rule3:
        @echo "hello"
        rule1
Run Code Online (Sandbox Code Playgroud)

makefile

62
推荐指数
4
解决办法
4万
查看次数

GCC与Visual Studio?

在Visual Studio 2008中使用GCC而不是VC++有多难?显然,某些关键字不匹配,有些可能无法获得语法突出显示(除非您创建了新的语言服务).

这是一个'makefile项目',几乎是什么?

gcc makefile visual-studio-2008 visual-studio visual-c++

61
推荐指数
3
解决办法
6万
查看次数

ifeq:在意外令牌附近出现语法错误

我正在编写一个在一个地方进行字符串匹配的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.

谢谢.

makefile

61
推荐指数
2
解决办法
2万
查看次数

如何在CMakeLists.txt中设置LDFLAGS?

我通过CMAKE_C_FLAGS在CMake中设置了CFLAGS.是这样设置LDFLAGS?

gcc makefile cmake ld ldflags

61
推荐指数
4
解决办法
10万
查看次数

通过读取另一个文件的内容在makefile中创建一个变量

如何从makefile中即时创建变量,其值将是另一个数据文件的全部内容.

makefile

61
推荐指数
5
解决办法
5万
查看次数

tar:文件在我们阅读时发生了变化

我正在使用maketar备份.执行makefile时,tar命令显示file changed as we read it.在这种情况下,

  • 当警告出现时,tar包就可以了
  • 但它会停止以下备份的tar命令
  • 显示警告的文件实际上没有改变 - 警告出现真的很奇怪
  • 显示警告的文件随机出现,我的意思是,每次运行我的makefile时,显示警告的文件都不同
  • --ignore-failed-read没有帮助.我在MinGW中使用tar 1.23
  • 我刚把电脑换成了WIN7 64位.该脚本在旧的WIN7 32位中运行良好.但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)

makefile tar

61
推荐指数
6
解决办法
9万
查看次数

通过命令行附加到GNU make变量

我正在使用GNU-make Makefile来构建一个包含多个目标(allclean,以及一些项目特定目标)的C项目.在调试过程中,我想在没有永久编辑Makefile的情况下将一些标志附加到单个构建中(例如,添加调试符号或设置预处理器标志).

在过去,我做了如下(使用调试符号示例):

make target CFLAGS+=-g
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并没有附加到CFLAGS变量,而是清除它并阻止它编译.是否有这样做没有确定某种形式的虚拟变量追加到年底的清洁方式CFLAGSLDFLAGS

c makefile gnu-make

60
推荐指数
4
解决办法
4万
查看次数

如何在Makefile中打印消息?

我想在使用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)

makefile

60
推荐指数
2
解决办法
9万
查看次数