如果你试图从C调用C++函数,那么你可能会遇到问题。编译程序是这样做的,以支持C++的函数重载和其他特性。
可以使用外部“C”通知C++编译器,函数C代码> cMANIN()/CUT>将从C代码调用:
extern "C" CMACInit() { ... }
当以这种方式声明时,C++编译器不会修改名称,并将所有的东西设置为“所以”函数可以从C代码调用。 < P>如果您试图从C调用C++函数,那么您可能会遇到问题。编译程序是这样做的,以支持C++的函数重载和其他特性。
可以使用外部“C”通知
我正在编译一个演示项目
该项目是为windows和linux编写的。我已经写了一个Makefile。但是,我不确定如何指定编译器将在其上编译的平台
我将在Linux上编译
在我的源文件中,我有以下内容:
#if defined(WIN32)
#include ...
#include ...
#elif defined(LINUX)
#include ...
#include ..
#else
#error "OS not supported"
#endif
我的简单Makefile是这样的。
我正在尝试运行这个命令,但不确定在哪里可以找到kernel\u build\u dir以及它是什么
我报名干什么
提前感谢..我不知道你想用这个命令做什么。我不确定它是一个定制的makefile,还是linux源代码中的makefile,或者其他更奇特的东西;但看起来您正在编译Linux内核。然后,kernel_build_dir指的是存储linux源代码的目录
来自制造者的人是您在linux管理中最好的盟友。键入man command以阅读有关command功能的简要说明:
-C dir,-d
我有一个生成文件,其中包含一些生成一些数据的目标(比如data1到dataN,所有数据都依赖于这些目标),还有一个prettify目标,它迭代输出并创建一个漂亮的报告。(注意:有许多dataN目标,并且生成文件是机器生成的)
一些dataX目标偶尔会失败,但我还是想运行prettify,因此prettify不依赖于alldata
有没有一种方法可以在一次调用make中运行相当于make-kalldata | | make prettify,使make尽最大努力构建所有数据,然后在生成的任何数据上
我一直在尝试使用MSP GCC编译器。我已经为单个文件编写了一个makefile,并且能够在MSP430设备中编译和闪存
我不知道如何为不同文件夹中相互依赖的许多源文件编写makefile
我正在开发一个串行派生程序
文件夹和文件结构如下
serial_driver/App
serial_driver/App/inc/app.h
serial_driver/App/inc/app.c
serial_driver/controller
serial_driver/controller/inc/ha
是否存在将gmake的GNU Makefile转换为可用于make(FreeBSD make)的Makefile的实用程序?不太可能有这样的实用程序,因为在GNUmake中,您可以做一些在其他版本的make中无法做的事情。除其他外,用于在makefile中操作字符串和条件的函数宏通常不可用。如前所述,没有这样的转换器,我非常怀疑可能存在这样的转换器。据我所知,您有两种选择:
使用GNU生成端口释放BSD。比如说
修补makefiles,使其与FreeBSD make兼容。实际上,在LuaJIT
这是我的makefile:
sandbox:sandbox.o
ld -o sandbox sandbox.o
sandbox.o:sandbox.asm
nasm -f elf -g -F stabs sandbox.asm
我在命令行中放置了一个制表符,但当我尝试创建该文件时,会出现以下错误:
未指定目标,也未找到makefile
我在用杰夫·邓特曼的书,那个makefile错误让我发疯,因为我现在无法在学习上取得进步 您似乎把“make命令行的制表符”和“make recip
我有一个大约20个URL的列表,我希望对每个URL并行执行以下命令:
在URL下载文件
解压文件
在上运行本地工具
如何使用makefile为此定义任务
我理解目标和依赖关系,但制定20多个目标似乎有些过头了。
有没有一种方法我可以指定一个数组,然后在它们上面并行地指定foreach?是你的朋友
最简单的方法是分解成小的makefile并在其上运行并行for循环。这里是他们从不同URL并行下载10幅图片的地方。是你的朋友
最简单的方法是分解成小的makefile并在其上运行并行for循环。这里是
我在linux内核的Makefile中看到了上述内容
在大多数其他脚本语言AFAIK中,它看起来不像常规的if语句
甚至在其他地方也没有endif结束标记
它是如何工作的?
这是可能的,并且有一个endif(最终你需要一些东西来关闭条件块;如果没有,我想文件的其余部分就是条件块的一部分)。与其他语言中常见的常规条件的唯一真正区别在于,这些条件只计算一次——在实际执行makefile之前。所以它们就像预处理器定义,而不像真正的脚本语言。我不确定这一点得到了多大程度的支持(即,在非GNU的情况下,做
我正在使用Kubuntu10.10和4核cpu。当我使用“make-j2”构建cpp项目时,2 core的cup使用率将达到100%,桌面环境将没有响应,构建过程也没有进展
版本信息:
The GNU make's version is 3.81
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
如何解决这个问题?谢谢。您确定该项目已准备好并行编译吗?可能先决条件的顺序不正确
如果您只是“完成”编译来构建项目?如果它结束了,那就是目标依赖性问
Makefile语法不是吗
target: require_files
cmd...
为什么我会有这个问题
生成文件
MXMLC = /opt/flex/bin/mxmlc
MXMLC_RELEASE = $(MXMLC) -debug=false -compiler.optimize=true
release: bin-release/Wrapper.swf, bin-release/Application.swf
bin-release/Application.swf: src/
对于下面复制的make文件,我得到了缺少分隔符的错误。选项卡空间似乎没有问题
OBJS = driver.o snapshot.o
SHOBJS = malloc.o mymemory.o
CC = g++
DEBUG = -g
CFLAGS = -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
Snapshot: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) -o Snapshot
driver.o: snapshot.h driver.
我正在尝试建立一个GDB。configure生成的Makefile包含一个名为“GOCFLAGS\u FOR_TARGET”的标志。有人能告诉我“GOCFLAGS”是用来做什么的吗?谢谢 它的makefile内置变量,用于我理解GCC支持的Go编程语言。你可以找到更多信息
我有一个makefile,它有许多类似的语句:
ABC_01.exe: ABC_01.o ../constant.o
gcc $^ -o $@ $(SOMEPATH)/bin/constant.dll
ABC_02.exe: ABC_02.o ../constant.o
gcc $^ -o $@ $(SOMEPATH)/bin/constant.dll
ABC_03.exe: ABC_03.o ../constant.o
gcc $^ -o $@ $(SOMEPATH
正在尝试安装CPAN Image::Magick模块,我收到一个核心文件丢失的致命错误(请注意在水平线之间突出显示的致命错误):
#包括
^
生成1个错误。
make:**[Magick.o]错误1
JCRISTY/PerlMagick-6.86.tar.gz
/usr/bin/make——不正常
运行make测试
没有成功的决策就无法进行测试
运行make安装
Make已返回错误状态,安装似乎不可能
思考下一步要做什么?您可能需要安装ImageMagick-devel软件包(带有Magi
上面只是一个代码片段makefile。如果我make game,主要问题是每个源代码的编译将扩展$(A),它将要求用户反复输入游戏版本$(A) 只有在用户未将游戏设置为目标时,才具有默认内容“demo”
那么,有没有办法将$(A)设置为展开&&
A = "demo"
%.o:%.cpp
$(CC) -c $^ $(A) -o $@
default:$(all_objs)
game:A = $(shell read -p 'Enter game version: ' gv &&am
这里,目录“coder”是一个通用的伪目录,带有一些生成libapple.so的示例代码。不同的用户可以签出这个工具,创建自己的目录,从“coder”复制模板代码,并根据自己的意愿进行定制。根据配置选项(指示用户),需要生成相应的libapple.so
正如我提到的,这是一个简化的例子。这不是一般编程、继承等问题。事实上,与“apple”文件夹类似,还有其他类似的文件夹,如“脚本”、“文档”、“配置”等,每个文件夹都具有类似的用户特定文件夹。此外,该工具将在单个存储库位置进行维护,以允许我支持和
我在一个项目的Makefile中使用JsHint,Make没有注意到报告的错误。是否有一种方法可以捕获错误,而不是硬退出Make的执行?下面是一个示例生成文件:
all: css js
css:
compass compile
hint:
jshint js/*.js
js: hint
uglify js/*.js
因此,例如,提示目标显示错误,但正在执行硬退出,并且没有通知Make它已退出
我可能没有使用正确的术语,我道歉。在菜谱前使用连字符
hint:
我在cygwin中运行了此makefile,但出现了一些错误这是makefile:
FFLAGS=
BFLAGS=-d -v -y
CFLAGS=-g -Wall -Wextra -std=c++11 -Wno-write-strings -I /usr/local/boost_1_50_0
FLEX=flex
BISON=bison
CC=g++
SRCS=y.tab.c ast.cpp tokentable.cpp symboltable.cpp main.cpp lex.yy.c
我有一个make变量,其中包含一个文件列表,每行一个文件,我想将所有文件合并到一个单独的行空间分隔列表中
下面的摘录是一次天真的尝试,但没有成功
define FILELIST
src/foo.c
src/bar.c
src/frobnicator.c
endef
empty :=
space := $(empty) $(empty)
$(subst \n,$(space),$(FILELIST))
结果:
FILELIST= src/foo.c
src/bar.c
sr
我正试图从源代码构建eduke32
除其他外,它需要SDL_mixer.h
我有:
$ locate SDL_mixer.h
/usr/include/SDL/SDL_mixer.h
(我已经安装了develtools组,以及许多其他开发包)
但当我开始构建时,我得到了SDL_mixer file not found错误
$ make
Build started using:
compiler: "gcc -Wimplicit -Wdeclaration-after-statement -O
我正在自动化make中的管道,该管道由多个可以链接在一起的操作组成。
文件名中指明了应用的操作。
有时,我必须在同一命令链中重新运行相同的操作以获得特定目标,例如,make input.filtered.sorted.update.sorted应产生以下输出文件:input.filtered,input.filtered.sorted,input.filtered.sorted.updated和input.filtered.sorted.updated.sorted。
然而,这似乎不可能一蹴而就
我想修改Makefile命令:
-rm -f $(OBJS)
-rm -f $(OBJS:.o=.mod)
第一个删除所有文件名.o,第二个删除所有文件名.mod。不过,我想
修改第二个,使我得到:mod_filenames.mod,即添加字符串“mod_”
我尝试了:-rm-f mod_$(OBJS:.o=.mod),但这只影响了列表中的第一个文件。但我在这里猜。如果有人能推荐一个广泛的网站来解释这种编程,我将不胜感激。描述了所有这些事情
您可以使用模式获得您想要的:
-rm -f $(OB
考虑一个makefile
all : a c
(cmd3)
a : b1 b2 b3 b4
(cmd2)
b% :
(cmd) $*
考虑到依赖项b%可以并行化并在网格引擎上运行。
通过对makefile进行最小的更改来qsub这些依赖项的最简单方法是什么,以便只有在满足所有依赖项后才执行cmd2 在makefile中使用类似的内容:
b%:
qsub -sync yes (cmd) $*
然后使用-j选项使它们并行运行。例如:
make -j all
我一直在浏览makefile语法手册,但没有找到任何真正有助于我在这里尝试实现的用例的东西
我有一个源文件列表,在一个公共目录下有不同的目录,如下所示:
src/a.h
src/b.h
src/dir/c.h
src/dir/dir/d.h
并希望make将这些单独用作最终创建以下内容的规则的依赖项:
build/a.h
build/b.h
build/c.h
build/d.h
然后将其单独用作更多规则的依赖项
到目前为止,我所拥有的:
什么不起作用:
没有规则将目标设置为“所有”所需的
我不完全理解如何使用特定于目标的变量来充当目标本身,它们有自己的依赖项和方法
示例Makefile可以工作但不使用特定于目标的变量:
VAR=progName
ATARGET: $(VAR)
@echo Do actions for $@ based on the completed target $(VAR)
$(VAR):
@echo Do actions on $@
瞄准
对progName执行操作
根据已完成的目标progName为目标执行操作
Makefile在尝试使
嘿,有没有人和SDCC合作,为Macbook上的8051微控制器系列制作项目。如果是,请张贴工作制作文件,特别是在设备中加载程序的部分。我不知道在Makefile中用program标记具体写什么。Makefile不一定包含将代码加载到部件的情况,因此任何旧示例都没有帮助。Makefiles本质上非常简单;您有一个目标及其依赖项—如果目标不存在,或者任何依赖项都比目标新,则通过执行命令重建目标
在您的情况下,您需要一个依赖于二进制图像或十六进制文件(或加载文件的任何格式)的虚假目标(不存在),要执
我有下面的示例makefile。我试图创建一个包含多个替换的目录结构,当我需要索引替换时,它似乎在做笛卡尔积:
genomes = C57B6NJ AKJ
GENOME_DIRS = ${genomes:%=${BASE_DATA_DIR}/genomes/%}
TWO_BITS = ${genomes:%=${GENOME_DIRS}/%.2bit}
all:
@echo ${TWO_BITS}
# OUTPUT
# Thu Apr 30 16:35 ~ $make all
然后,我尝试对跳过的文件执行完全相同的编译命令,并且该文件正在正确编译。但当我把它放进make文件时,它只是被跳过了。每生成一个其他文件 没有实际看到makefile(您没有提供),我们只能猜测(尽管我认为这是一个有根据的猜测)
由于make通过检查文件时间戳来查看它们是否需要重建,所以这是一个需要考虑的问题。如果目标的时间戳晚于所有依赖项的时间戳,则不会生成目标
另一种方法是确保顶层规则实际上依赖于层次结构中的某个地方您试图构建的内容。我指的是规则集:
all: xyzzy
xyzzy:
一位同事刚刚遇到了这个问题,我想问一下,对于以下问题是否有什么好的解决方案:我有一个GNU makefile:
a: | b
touch $@
b:c
touch $@
c:
touch $@
然后我跑:
~/tmp> make a
touch c
touch b
touch a
~/tmp> make a
make: `a' is up to date.
~/tmp> touch b
~/tmp> make a
make: `a' is up
我知道,$$@用于获取先决条件行上的目标名称,但无法使其工作以查找没有扩展名的目标名称
这就是我的意思。我有这个
foo.pdf : foo.tex
pdflatex $?
但是我不想重复文件名foo。我想写像(这不起作用)
我尝试了许多其他的变化,但都没有奏效。我所拥有的make book中没有这方面的例子
你知道怎么做吗?在LinuxMint上使用Gmake3.81
或者只获取目标的foo部分,以便在依赖项行中使用它
我知道我可以写这个
TARGET = foo
${TARGET:
在makefiles中,%.c和*.c之间有什么区别。例如,我们可能有:
vpath %.c $(BASE_DIR)platform/$(TARGET)
及
两者都包括特定目录中以.c结尾的所有文件。但是当我们使用%.c和*.c时?换句话说,为什么我不能使用
vpath *.c $(BASE_DIR)platform/$(TARGET)
而不是
vpath %.c $(BASE_DIR)platform/$(TARGET)
?
谢谢。GNU Make中的%和*都是通配符函
标签: Makefile
environment-variablesgnu-make
我尝试在GNU makefile中使用Windows7的环境变量PROGRAMFILES(X86),但没有成功
这里有一个简单的例子:
$(info DIR: $(PROGRAMFILES(X86)))
nop:
@echo x
如果我执行这个makefile,我只得到
DIR: )
x
虽然我期望:
DIR: C:\Program Files (x86)
x
知道如何在GNU makefile中使用环境变量PROGRAMFILES(X86)吗
我在Cygwin上使用GNU ma
由于这些python脚本不是模块的一部分,因此我将在Makefile中单独管理安装。以下是我的Makefile.am中的内容:
EXTRA_DIST = setupenv.sh bootstrap tests
dist-hook:
rm -rf $$(find $(distdir)/tests -name \*.swp -o -name \*.pyc)
install-exec-hook:
mkdir -p $(prefix)/unit_tests/unittest2
makefile中存档中的目标成员名称是什么
这里解释如下:
但我不太明白,因为没有一个简单的例子
如果我有
target(name): name
echo $%
$%是目标名称的自动变量
如果使用make target,则此操作将不会运行
为什么??“目标成员名称”实际上是什么?您链接到的文档在开头附近专门解释了这一点
此构造仅在目标和先决条件中可用,在配方中不可用!您可能在recipes中使用的大多数程序都不支持此语法,并且无法直接作用于存档成员。只有ar和其他专门设计用于对
我的makefile有问题。我正在尝试编译.c。来自./src/的cpp和.S文件。对象应放入./obj/,二进制文件应放入./bin/。对于我的当前文件,它尝试在./src/中搜索文件,但尝试为每个扩展名编译objectfile。例如,如果它找到kernel.cpp,它将尝试编译kernel.S和kernel.c,但它们不在那里,所以我得到一个错误
这是我的密码:
TARGET = kernel
CC = gcc
LD = ld
SRCDIR = src
OBJDIR = obj
BIND
我有一个golang monolith repo,里面有多个应用程序。我在每个应用程序根目录中都有Makefile,我必须在应用程序目录中,如root/app1/才能运行makebuild。我想在每个服务中去掉这些相同的Makefile,并拥有一个顶级Makefile,我可以使用它一次构建所有应用程序,每个应用程序创建单独的可执行文件,或者只构建特定的应用程序。差不多
make build app1 # builds only app1
make build # builds all apps
我在makefile.init中定义了一些变量:
MY_VARIABLE = some_value
在预处理器设置中,我有一个-D开关:
-DUSE_MY_VAR=\"$(MY_VARIABLE)\"
在源文件中,我有:
static const char* my_val = USE_MY_VAR;
因此,这个my_val将获得makefile.init文件中设置的值
它编译得很好,但索引器发出警告“遇到了错误的字符序列:\”。有没有办法让它理解它,或者让它忽略这个特定的变量?Ok终于找到
我试图在Make target中拆分一个带有冒号分隔值的字符串
当我尝试使用for循环、EVE、Shell分割目标食谱中的字符串时,得到空白值。其中,当我使用shell命令在目标结果之外拆分字符串时,结果为正
谁能帮我修改一下目标配方吗
下面是片段
notebooks=new:e7e45d89-94cc-4783-86c5-2236d9904a24 test:2af1d689-98c3-48f2-984d-2ea21c5135dd
j=new:e7e45d89-94cc-4783-86c5-22
我有一个源代码,我正在尝试为armv7架构交叉编译,它正在编译并生成二进制文件。当我在不同的目录中编译相同的代码时,生成的二进制文件与前一个不同。
为什么我会有这种不同?。不仅是二进制文件,对象文件也在改变。
我使用的是armpokylinuxgnueabigcc。我正在使用以下命令“source/opt/fsl-imx-x11/4.1.15.1.1/environment…”等创建工具链。工具链也正在导出编译器设置(CLFAGS、LDFLAGS) 这与交叉编译或Yocto无关,只是因为二进制文
标签: Makefile
gnu-makeconfigureautoconfautomake
我正在尝试编译nano并遇到一些问题
详细信息如下--版本我无法更改(在s390架构上编译,无法访问其他版本):
Nano源代码版本2.9.7
使用autoconf版本2.62
使用automake版本1.10
通过更改配置行am\uu api\u version='1.10',
我运行configure,然后运行make。运行make时,我遇到以下错误:
make
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/sh /
我试图在我的系统上编译的主分支,但是make不起作用,并且没有提供任何ERORR。
cmake运行良好,唯一缺少的是intelsde未找到和micsdk未找到
如果我跑步:
$ ls
cmake CMakeCache.txt CMakeFiles cmake_install.cmake CTestCustom.cmake Makefile
$ make
$
我可以在目录中看到makefile,但提示符只返回空,make不执行任何操作。Makefile是否已损坏?看起来项目的某些功能已
考虑类似于以下内容的Makefile:
CC = gcc
CXX = g++
CXXFLAGS += -std=c++11
SRCDIR = .
OBJECTS = \
file1.o \
file2.o \
file3.o
THREADS = 1
all: release
release: CXXFLAGS += -DNUM_THREADS=$(THREADS)
release: main
debug: CXXFLAGS += -g -DDEBUG -DVER
在我的makefile配置中,所有对象文件都被编译到一个特定的目录中。如果它不存在,编译器会进行投诉。我想创建一个makefile目标,该目标识别任何对象文件,并在任何其他目标运行和实际编译对象文件之前创建该目录
到目前为止,我已经尝试了模式匹配和双冒号规则
obj:
mkdir obj
obj/%.o :: | obj
obj/example.o :: src/example.cc includes/example.hh
$(build_obj_file) # macro
我试图让makefile将对象文件编译到obj dir中,然后将编译后的代码链接到可执行文件中
CC=gcc
CFLAGS=-Iinclude.
OBJ = obj/main.o obj/print.o
%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)
prog: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
错误是没有规则使目标为'prog'所需的'obj/main.o'。停止
这是我在makefile教程中做的纯复制粘贴
我有一个makefile来创建一个库,我需要它来创建一个80%的库或一个完整的库,这意味着一个包含80%函数的库或一个包含所有函数的库
当我调用make时,“all”规则应该创建80%的库(到目前为止还不错),而当我调用“make complete”时,“complete”规则应该创建100%的库(仍然很容易),并且在任何情况下都不应该重新链接,这里我有一个问题
什么进展顺利:
以下是我所拥有的:
all: $(NAME)
$(NAME): $(OBJS)
ar -rc $@ $^
我仍在学习如何在windows中使用makefiles,我对ifeq感到困惑。我试图做的是,当我在命令行中输入makez=1时,它将使用-std=c++17编译我的文件
下面是让我困惑的代码部分:
CXXFLAGS = -Wall -Werror
COMMONRECIPE = $(CXX) $(CXXFLAGS) $? -o $@ && @echo recompiled: $?
ifeq "$Z" "1"
CXXFLAGS += -std=c++17
endif
它
我有一个GNU Makefile,在顶部设置了一些默认值。其中之一是
CC ?= gcc
后来,我有了像这样的食谱
file.o: file.c ...
$(CC) -c $<
为什么不尊重“gcc”的默认值,为什么要插入其他值?如果有帮助,我就在Mac上。因为CC是GNU Make set的内置变量,在读取makefile(到CC)之前隐式设置,并且?=仅在未设置(未定义)的情况下设置变量
使用:=您可以设置它,尽管如此,但我认为这不是您想要的
您可以使用选项“无内置变量”运
我正在重新编译一些代码,它们都是fortran.f90代码,尽管编写时间很早,但是makefile的comment部分中的日期是2009年
我似乎可以选择两种路径:使用Makefile.unix或Makefile.dvf
所以我的问题是,在这种情况下,什么是dvf
我看到的是顶部目录中有Makefile.dvf还有Makefile.unix和Makefile.srcs。然后是名为source的子目录,所有内容都在其中,然后还有13个子目录组成软件包。
在这个source文件夹下,它有以下内容
M
我编写了NASM netwide汇编程序,出于某些原因,我需要使用一些用C编写的函数。因此,我尝试使用ld link editor将已编译的C对象文件与已编译的汇编对象链接起来。我是这样做的:
ld-m elf_x86_64-lc-dynamic linker=/lib64/ld-linux-x86-64.so.2对象_文件-o程序
在我找到必要的参数之前,它不想链接并工作足够长的时间。现在,使用此参数集时,这将按预期工作。但是我不理解-lc和-dynamic linker=/lib64/ld-
1 2 3 4 5 6 ...
下一页 最后一页 共 87 页