在 Makefile 脚本中读取用户输入
我有一个非常简单的makefile(只是递归地调用另一个子目录的构造): all: cd addons/godot-haskell-plugin && make && cd - run: cd addons/godot-haskell-plugin && make run && cd - 我想做的是 检查Shell Variable ENV_VAR是否定义了. 如果是这样,则像往常一样运行makefile(即ENV_VAR=1 make all应完全按照上面的make all进行操作). 如果不是,请提示用户带有消息"警告:env_var未定义;继续?[y/n]",其中" y"的输入通过make all and make run as通常," n"的输入只是回应消息并退出. 我知道,要在bash中执行此操作,您将使用echo和read函数的组合.但目前尚不清楚如何在Make中做到这一点. 解决方案 make并不是真正打算具有互动性,但是您
8 2024-04-22
编程技术问答社区
避免使用 Makefile 编译不变的源代码
我试图编写一个应该通过欲望将所有来源编译到对象中,然后构建输出二进制的makefile. 我尝试了几个示例并找到了解决方案,但仅当我将所有源放在同一文件夹中时. 但是在此项目中,文件分布在多个目录和子目录中. 我修改的makefile外观如下 TARGET=analyser CC=arm-none-eabi-gcc OBJCPY=arm-none-eabi-objcopy CFLAGS= -DNDEBUG -DCPU_MK64FN1M0VLL12 -DUSE_RTOS=1 -DPRINTF_ADVANCED_ENABLE=1 \ -DFRDM_K64F -DFREEDOM -DFSL_RTOS_FREE_RTOS -Os -Wall -fno-common \ -ffunction-sections -fdata-sections -ffreestanding -fno-builtin \ -mthumb -mapcs -std=gnu99 -mcpu=corte
10 2024-04-22
编程技术问答社区
nmake的致命错误U1034:语法错误:缺少分隔符
# gnsdk C# wrapper sample makefile ## CC=Csc.exe CP=cp GNSDK_LIB_PATH=../../../../lib/$(GNSDK_PLATFORM) GNSDK_WRAPPER_LIB_PATH=../../lib/$(GNSDK_PLATFORM) GNSDK_MARSHAL_LIB=$(GNSDK_WRAPPER_LIB_PATH)/gnsdk_csharp_marshal.dll GNSDK_CSHARP_LIB=../../lib/gnsdk_csharp.dll CSHARP_FLAGS=/noconfig /nowarn:1701,1702 /nostdlib+ /errorendlocation CSHARP_REFS=/reference:$(GNSDK_CSHARP_LIB) /reference:"Microsoft.CSharp.dll" /reference:"mscorlib.dll" /refe
40 2024-04-16
编程技术问答社区
在Makefiles GCC C程序中,什么是.d文件,还有什么是通配符?
在Makefiles GCC C程序中,.D文件是什么,以及什么是通配符.? rgds, 解决方案 这些*.d通常(通常是常规的)是make依赖项(但也许,并且不太可能, d - 语言源代码). gcc 编译器知道-M(及相关) preprocessor option ,要求make> .... 而不是输出预处理结果,而是输出适合描述主源文件依赖项的规则. 在一些好的Makefile技巧的帮助下,您可以自动编写Makefile自动处理依赖项,例如 之类的东西 ## dependencies of foo.c foo.d: foo.c $(COMPILE.c) -M $^ -o $@ ## include them -include foo.d 关于$(wildcard *.c),阅读 gnu ,一节在文件名称函数.所以$(wildcard *.c)是 globbing *.c *.c make make将其扩展到以.c结尾的文件
18 2024-04-10
编程技术问答社区
C语言的Makefile(ubuntu)多定义
我正在学习C并尝试使用Makefile构建.我陷入以下错误,不知道下一步该怎么做. 构建命令是 gcc -o logfind logfind.o cmdargutils.o filesystem_utils.o file_utils.o strutils.o 如果我同时需要file_utils.o和cmdargutils.o,但是如果我添加两个错误,我会收到以下错误. 错误 file_utils.o:(.rodata+0x0): multiple definition of `MAX_LINE' logfind.o:(.rodata+0x0): first defined here collect2: error: ld returned 1 exit status Makefile:2: recipe for target 'logfind' failed make: *** [logfind] Error 1 来源是: makefile logfin
8 2024-04-10
编程技术问答社区
错误:从'void*'到'int'的转换失去了精度[-fpermissive]在makefile中。
在ubuntu上编译以下makefile 12.04 LTS(64位)遇到此错误时: Ana.cxx:21:46: error: cast from ‘void*’ to ‘int’ loses precision [-fpermissive] 在此行中: 21 : TThread::Printf("Start of Ana %x \n" ,(int)ptr); 这是makefile: ObjSuf = o SrcSuf = cxx DllSuf = so ExeSuf = OutPutOpt = -o CXXFLAGS = -g -Wall -fPIC -DOSF1 CXX = g++ CCFLAGS = -g -Wall -DOSF1 CC = gcc LD = g++ LDFLAGS = -
12 2024-04-10
编程技术问答社区
将大型C程序分解为头文件和C文件
我必须将以下代码分解为以下文件:main.c,Student.C,suside.H,Mergesort.C,Mergesort.H,AUX.C和AUX.H.然后,我必须制作一个制作费来编译所有内容. 该程序是在链接列表上实现的Mergesort.我已经分开了代码,但是我对在标题文件中该做什么和包括指令,甚至不太了解如何创建Makefile的线索.我需要包含什么标题文件,我需要在C文件中包含什么?例如,如果Mergesort.c使用学生的功能.这是原始程序的代码: #include #include #define NAME_LEN 25 struct node { int number; char name[NAME_LEN+1]; struct node* next; }; /* The functions to manage the linked list. The functions prompt the u
6 2024-04-10
编程技术问答社区
"使所有 "究竟是如何运作的?
所以我正在研究makefiles的用法.假设我在[1,100]中遇到很多功能fun_i.c.我已经用单独的.c文件编写了所有内容,以便在我只更改其中一些时进行更快的汇编.我需要创建一个makefile.我在想这样的事情: all : program program: fun1.o fun2.o ........ fun100.o main.o gcc -o program fun1.o fun2.o ..... fun100.o fun1.o: fun1.c gcc -c fun1.c . . . fun100.o: fun100.c gcc -c fun100.c main.o : main.c gcc -c main.c 我在线阅读了许多文章,讨论了目标"全部"如何确保每次更改函数中的某些内容时,我称之为只有更改的更改(因此我将避免不执行的重新编译). 但是,我不确定我是否在这里使用它.我检
8 2024-04-10
编程技术问答社区
无法为CUDA C程序创建一个有效的Makefile
我有一个由3个cuda文件和2个标题形成的简单脚本: main.cu , kernel.cu func.cu , kernel.h 和 func.h .他们的目标是计算2个向量的总和. // main.cu #include #include #include #include #include "kernel.h" int main(){ /* Error code to check return values for CUDA calls */ cudaError_t err = cudaSuccess; srand(time(NULL)); int count = 100; int A[count], B[count]; int *h_A, *h_B; h_A = A; h_B = B; int i; for(i=0;i
16 2024-04-10
编程技术问答社区
错误1:制作c文件时没有输入文件
我正在尝试使用依赖性的依赖项编译C文件,使用该错误陷入困境: Compiling tpc_lqe.o ... /cygdrive/c/Sandbox/ZigBee/Tools/ba-elf-ba2/bin/ba-elf-gcc -c -o tpc_lqe.o [some -options] -I/cygdrive/c/Sandbox/ZigBee/Components/TPC/Include -I/cygdrive/c/Sandbox/ZigBee/Components/TPC/Source -I/cygdrive/c/Sandbox/ZigBee/Components/AppApi/Include -I/cygdrive/c/Sandbox/ZigBee/Components/Common/Include -I /cygdrive/c/Sandbox/ZigBee/Components/TPC/Source/tpc_lqe.c -MD -MF tpc_lqe.d -M
10 2024-04-10
编程技术问答社区
Program_name: 链接器输入文件未使用,因为没有完成链接。
我有6个程序:医院,genpazienti.c,triage.c,paziente.c,prestazione.c和proparto.c. 其中没有一个包括其他. 我该怎么做? 我尝试了: all: HOSpital GenPazienti Paziente Prestazione Reparto Triage HOSpital: HOSpital.o gcc -o HOSpital HOSpital.c HOSpital.o: HOSpital.c gcc -c HOSpital HOSpital.c GenPazienti: GenPazienti.o gcc -o GenPazienti GenPazienti.c GenPazienti.o: GenPazienti.c gcc -c GenPazienti GenPazienti.c Paziente: Paziente.o gcc -o Pazien
2 2024-04-10
编程技术问答社区
如何在使用nostdlib和nostdinc标志编译时使用stdio和stdlib?
我写了一本用另一个应用程序编译我的Mini-OS的Makefile. 我必须使用-nostdioc和-nostdlib对它们进行编译,但是问题是,该应用程序正在使用stdio/stdlib函数,当我运行makefile时,我会收到错误消息,即找不到我的应用程序使用的功能. 我试图删除-nostdlib -nostdioc,但这不起作用. 在makefile 如果有人想看看. 解决方案 -nostdlib告诉GCC不要包括告诉编译器不包括标准库,其中之一是GLIBC(GNU LIBC). -nostdinc告诉编译器不要将标准路径用于标头文件. stdlib.h和stdio.h中具有原型的功能是LIBC的一部分,您告诉过GCC不要使用.因此,您需要自己实施它们或明确包含LIBC(一些用于自定义操作系统的常见常见是Newlib和Uclibc).哪种方法更容易取决于所使用的功能.我应该补充一点,在这一点上,如果您要编译操作系统和应用程序,甚至是静态应用程序,您可能需要考虑使用跨
16 2024-04-10
编程技术问答社区
递归调用makefile不更新对象文件
我有一个带有递归呼叫的Makefile.首次运行时,将创建对象文件并链接得很好.但是,当我修改源文件并再次运行时,不会重新创建对象(MAKE SAVE TARGES是最新的).我需要运行make clean然后运行.这是我的makefile的简化版本,我认为包括所有相关信息: PCC = mpicc #Locations OBJDIR = ./objects #Compiler and linker flags FLAGS = -g -lm #Object files SHAREDOBJS = $(addprefix $(OBJDIR)/,shared1.o shared2.o) SPECIFICOBJS = $(addprefix $(OBJDIR)/,specific1.o specific2.o) #How to compile and link $(OBJDIR)/%.o: %.c $(PCC) -c $*.c $(EXTRA_FLAGS) -o $(OBJ
6 2024-04-10
编程技术问答社区
在控制台中工作正常的Makefile错误
我正在构建一个运行一系列测试并将结果添加到文件中的makefile.在makefile中,我将此设置为: runtests: rm -f results.txt cardtest1 > results.txt cardtest2 >> results.txt cardtest3 >> results.txt cardtest4 >> results.txt unittest1 >> results.txt unittest2 >> results.txt unittest3 >> results.txt unittest4 >> results.txt 现在,我可以在此或任何其他订单中运行上述所有命令(提供结果.但是,无论在rm -f resultss.txt之后运行什么测试,当它在makefile中时,它将始终会产生错误. flip1 ~/src/dominion-base 1
6 2024-04-10
编程技术问答社区
在Win8/Ubuntu上编译Makefile的行为是不同的?
我得到了一个C代码,用一些Linux派生编写,我想将其移植到Windows中. 我对makefile进行了一些改动,并使用mingw32 make进行了编译. 生产的执行文件正常工作,直到我看到结果为止. 该程序用于进行一些数据分析,并应导致数字列表20至100.对于数据,应有3个数字左右48.442. 但是,当我运行Windows-recutable时,我会在29213635916589853000000000000000000000000000000000000.000 中获得3个数字. 然后我安装了VirtualBox,并尝试使用" make"作为控制台命令来运行原始makefile,但它抱怨说,数学libary并未请求(POW UNDEFINED等),尽管将-lm插入每个GCC命令. Windows makefile: COMPILER_OPT = -O3 all: extract_timestamps extract_timestamps: extrac
16 2024-04-10
编程技术问答社区
Makefile第一条规则的目标
我试图仅使用三个文件来学习make foo.h #ifndef __foo_H_ #define __foo_H_ void print(); #endif foo.c #include #include "foo.h" void print() { printf("Hello World !"); } main.c #include "foo.h" int main() { print(); return 0; } 当我使用以下makefile时,一切都可以正常运行 makefile CC = gcc CFLAGS = -I. DEPS = foo.h OBJ = foo.o main.o .PHONY: clean main: $(OBJ) gcc -o $@ $^ $(CFLAGS) %.o: %.c $(DEPS) $(CC) -c -o
2 2024-04-10
编程技术问答社区
在C语言中编译一个包含libmodbus的程序
我是C的新手...我写了一个非常简单的modbus1.c,其中包括libmodbus(我下载,解压缩,未陷入困境的来源,./configure'd,制作并成功完成安装). 当我尝试制作modbus1.c时,我得到了: cc -Wall -g modbus1.c -o modbus1 Undefined symbols for architecture x86_64: "_modbus_close", referenced from: _main in modbus1-6cd135.o "_modbus_connect", referenced from: _main in modbus1-6cd135.o "_modbus_free", referenced from: _main in modbus1-6cd135.o "_modbus_new_tcp_pi", referenced from: _
4 2024-04-10
编程技术问答社区
Cflags在makefile中的用法
我想知道C flagss的使用. CFLAGS=-00 -g ${PROG}: ${OBJS} ${CC} ${CFLAGS} -o ${PROG} ${OBJS} ${LDFLAGS} -00定义什么? ############# Target type (Debug/Release) ################## ############################################################ TARGET_NAME=telematics CFLAGS=-O0 -g LinkDebug=-g -Xlinker -Map=$(TARGET_NAME)debug.map LinkRelease=-O -s -Xlinker -Map=$(TARGET_NAME).map SUPPRESS_WARNINGS=-Wno-write-strings -Wno-builtin-macro-redefined COMMON_DEFIN
6 2024-04-10
编程技术问答社区
在Makefile中,'All'属于哪里?
我们将全部放在零件中? 我也有一个类似的问题找到早些时候更多细节.我还看了看CC=gcc CFLAGS=-Wall -g clean: rm -f all: ex1 这没有在C中编译我的EX1.另外,如果我想在此文件中添加更多内容.像EX1,EX2一样,锻炼什么.我会把全部放在顶部,然后重复 rm - f whatever 清洁下方的线? 感谢您的帮助和帮助.耐心也赞赏. 解决方案 all实际上并不特别,只是一个常用的目标名称.为了使其正常工作,它应该是文件中的第一个目标.这使其成为默认目标,gmake的工作原理与gmake all. 相同 通常,all目标具有依赖性,这是需要构建的东西.例如 all: myexe rm与clean目标有关(这也不是特别的,只是常用的名称).您这样定义它: clean: rm -f myexe 这使其删除myexe当运行gmake clean时.如果使文件构建其他文件,则还应在此处列出它
6 2024-04-10
编程技术问答社区
如何在Linux上用C语言包含多个目录的文件?
gcc main.c -o main -I include 我正在创建一个具有以下目录结构的小C应用程序: app => => src (一个目录,所有源文件) => include (一个目录,所有标头文件) => common (一个目录,所有常见文件) => main.c 现在,我正在尝试运行 main.c ,其中包含 #include 指令,以包含 include include 目录和函数调用到 .c common 和 src 目录中的文件.我正在使用 -i 选项,但仅对一个目录路径指示有用. 编译器将如何在所有 src , common 和中添加目录以解决呼叫. 请建议我一个命令或 make 文件,以提供多个目录的路径,同时使用 gcc . . 解决方案 允许多个-I选项. -I选项的描述来自目录搜索选项 状态: 将目录DIR添加到要搜索标题文件的目录列表的头部的头部.这可以用来覆盖系统标头文件,替换自己的版本,因为在系
14 2024-04-10
编程技术问答社区