Tag: makefile

如何在Makefile中获取脚本?

有没有更好的方法来从一个生成文件中获取设置envvariables的脚本? FLAG ?= 0 ifeq ($(FLAG),0) export FLAG=1 /bin/myshell -c '<source scripts here> ; $(MAKE) $@' else …targets… endif

在Makefile中的函数

我正在写一个有很多重复的东西的Makefile,例如 debug_ifort_Linux: if [ $(UNAME) = Linux ]; then \ $(MAKE) FC=ifort FFLAGS=$(difort) PETSC_FFLAGS="…" \ TARGET=$@ LEXT="ifort_$(UNAME)" -e syst; \ else \ echo $(err_arch); \ exit 1; \ fi 在定义了目标'syst'的地方,定义了variables'UNAME'(通常是Linux,但也可能是Cygwin或OSF1),variables'difort'和'err_arch'也被定义。 这段代码被用于很多次,用于不同的编译目标(使用名称约定“ “)。 由于这是大量的冗余代码,我希望能够以更简单的方式编写它。 例如,我想要做这样的事情: debug_ifort_Linux: compile(uname,compiler,flags,petsc_flags,target,lext) 其中compile可以是一个基于参数执行上面的代码的函数。 有没有人有任何想法我可以做到这一点?

CFLAGS,CCFLAGS,CXXFLAGS – 这些variables究竟控制着什么?

我正在使用GNU make编译我的C ++代码,我想了解如何使我的编译可定制。 我在不同的地方读到CFLAGS , CCFLAGS和CXXFLAGS用于这个目的。 那我该如何使用它们呢? 如果我有更多的命令行参数的编译器,我应该追加到CFLAGS或prepend他们? 有没有普遍的做法? 为什么三个不同的variables? 我想C编译器应该得到CFLAGS和CCFLAGS ,而C ++编译器应该得到CFLAGS和CXXFLAGS – 我知道了吗? 人类用户是否应该设置这些variables? 做任何自动工具( automake , autoconf等)设置它们? 我应该使用的linux系统没有定义任何这些variables – 这是典型的吗? 目前我的Makefile看起来像这样,我觉得它有点肮脏: ifdef code_coverage GCOV_FLAG := -fprofile-arcs -ftest-coverage else GCOV_FLAG := endif WFLAGS := -Wall INC_FLAGS := -Istuff -Imore_stuff -Ietc CCFLAGSINT := -O3 $(WFLAGS) $(INC_FLAGS) $(CCFLAGS) … (somewhere in the makefile, the command-line […]

如何在Makefile中设置环境variables

我想改变这个Makefile: SHELL := /bin/bash PATH := node_modules/.bin:$(PATH) boot: @supervisor \ –harmony \ –watch etc,lib \ –extensions js,json \ –no-restart-on error \ lib test: NODE_ENV=test mocha \ –harmony \ –reporter spec \ test clean: @rm -rf node_modules .PHONY: test clean 至: SHELL := /bin/bash PATH := node_modules/.bin:$(PATH) boot: @supervisor \ –harmony \ –watch etc,lib \ –extensions […]

通过命令行附加到GNU makevariables

我正在使用一个GNU make Makefile来构build一个包含多个目标( all , clean ,和一些项目特定目标)的C项目。 在debugging的过程中,我想将一些标志附加到单个版本,而不需要永久编辑Makefile(例如,添加debugging符号或设置预处理器标志)。 在过去,我已经做了如下(使用debugging符号的例子): make target CFLAGS+=-g 不幸的是,这不是追加到CFLAGSvariables,而是清除它,并停止编译。 有没有一个干净的方式做这个没有定义某种虚拟variables附加到CFLAGS和LDFLAGS的末尾?

在Makefile中=和=有什么区别?

对于Make(或Microsoft nmake)中的variables赋值,我看到:=和=运算符。 他们之间有什么区别?

CMake:如何在CMakeLists.txt中设置LDFLAGS?

我通过CMAKE_C_FLAGS在CMake中设置了CFLAGS。 像这样设置LDFLAGS?

我怎么可以添加目录到$ PATH在Makefile中?

我想写一个运行testing的Makefile。 testing位于“./tests”目录中,待testing的可执行文件位于“./bin”目录下。 当我运行testing时,他们看不到exec文件,因为./bin目录不在$ PATH中。 当我做这样的事情时: EXPORT PATH=bin:$PATH make test 一切正常。 不过,我需要改变Makefile中的$ PATH。 简单的Makefile内容: test all: PATH=bin:${PATH} @echo $(PATH) x 它正确地打印path,但它没有find文件x。 当我手动执行此操作时: $ export PATH=bin:$PATH $ x 一切都好了。 我怎么能改变Makefile中的$ PATH?

makefiles – 一次编译所有的c文件

我想尝试GCC整个程序的优化。 为此,我必须一次将所有的C文件传递给编译器前端。 然而,我使用makefile来自动化我的构build过程,而且在makefile魔术方面我不是专家。 如果我想使用一次调用GCC来编译(甚至可能是链接),我应该如何修改makefile? 作为参考 – 我的makefile看起来像这样: LIBS = -lkernel32 -luser32 -lgdi32 -lopengl32 CFLAGS = -Wall OBJ = 64bitmath.o \ monotone.o \ node_sort.o \ planesweep.o \ triangulate.o \ prim_combine.o \ welding.o \ test.o \ main.o %.o : %.c gcc -c $(CFLAGS) $< -o $@ test: $(OBJ) gcc -o $@ $^ $(CFLAGS) $(LIBS)

Makefile中括号$()和花括号$ {}的区别是什么?

语法${var}和$(var)调用variables有什么区别吗? 例如,variables的方式将被扩展或任何东西?