如何在我的make-file中使用选项-std=c99或-std=gnu99编译我的C代码?
-include ../../../Common/C/Make.cfg
### target ###
TARGET_NAME = myRec
### Objects, sources ###
# C source files
CSRCS = \
myRec.c
LDLIBS ?= -lNBiometrics -lNMedia -lNCore
include ../../../Common/C/Make.rules
Run Code Online (Sandbox Code Playgroud) 这是我的c项目它是完全简单的linux shell我在linux中运行这个程序我想为我的程序make makefile.我想简单的makefile学习我如何才能实现它?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#define BUFFER_SIZE 1<<16
#define ARR_SIZE 1<<16
void sig_had(int signo)
{
puts ("This is my signal handling ..!");
}
void parse_args(char *buffer, char** args,
size_t args_size)
{
char *buf_args[args_size];
char **cp;
char *wbuf;
size_t i, j;
wbuf=buffer;
buf_args[0]=buffer;
args[0] =buffer;
for(cp=buf_args; (*cp=strsep(&wbuf, " \n\t")) != NULL ;){
if ((*cp != NULL) && (++cp >= &buf_args[args_size]))
break;
}
for (j=i=0; buf_args[i]!=NULL; i++){
if(strlen(buf_args[i])>0)
args[j++]=buf_args[i];
}
}
int …Run Code Online (Sandbox Code Playgroud) 我有以下makefile:
CC = gcc
ROOTPATH = /home/swagatam
LIB_PATH = $(ROOTPATH)/mylib/libf2c.a \
$(ROOTPATH)/mylib/blas_LINUX.a \
$(ROOTPATH)/mylib/lapack_LINUX.a -lm
INC_PATH = -I$(ROOTPATH)/myinclude
swadgesv : swadgesv.o
$(CC) $(LIB_PATH) swadgesv.o -o swadgesv
swadgesv.o : swadgesv.c
$(CC) $(INC_PATH) -c swadgesv.c
clean:
rm -f *.o
Run Code Online (Sandbox Code Playgroud)
swadgesv.c是程序求解AX = B形式的方程式.我需要3个头文件和3个库来链接解决概率.但是当我在终端中运行Makefile时,它显示:
gcc -I/home/swagatam/myinclude -c swadgesv.c
gcc /home/swagatam/mylib/libf2c.a /home/swagatam/mylib/blas_LINUX.a /home/swagatam/mylib/lapack_LINUX.a -lm swadgesv.o -o swadgesv
swadgesv.o: In function `main':
swadgesv.c:(.text+0x0): multiple definition of `main'
/home/swagatam/mylib/libf2c.a(main.o):(.text.startup+0x0): first defined here
/home/swagatam/mylib/libf2c.a(main.o): In function `main':
(.text.startup+0xad): undefined reference to `MAIN__'
swadgesv.o: In function `main':
swadgesv.c:(.text+0xc1): undefined …Run Code Online (Sandbox Code Playgroud) 我已经获得了一个已经正常工作的Makefile,它实际上工作正常.
Makefile内容可以在这篇文章中找到...
关于Makefile的问题 - 什么是"$ +"以及这里调用的.c文件/依赖项在哪里?
我从上面提到的上一篇文章中分别提出这个问题,因为它涉及一个不同的问题,并将其添加到该问题将不必要地增加其长度.
现在我添加了一个在很多地方经常使用的功能,所以我认为创建一个单独的文件将是一个不错的主意,所以我创建linklayer.c并添加linklayer.o到$LIBOBJS.
我加了这个......
LIBOBJS= linklayer.o csum.o compact.o protoname.o headers.o
parseargs.o cryptomod.o crc32.o
Run Code Online (Sandbox Code Playgroud)
还有这个
linklayer.o: linklayer.c
$(CC) -o $@ -c -I. $(CFLAGS) $+
Run Code Online (Sandbox Code Playgroud)
我已经声明了sendip_module.h已经在项目中存在的每个模块中声明和访问的函数.
但现在这个多重定义错误即将来临......我做错了什么或误解了什么?
注意: "ipv6_opts"在ipv6.h中定义
$ make all
for subdir in mec ; do \
cd $subdir ;\
make ;\
cd .. ;\
done
make[1]: Entering directory `/home/udit/Desktop/sendip-2.5-mec-2/mec'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/udit/Desktop/sendip-2.5-mec-2/mec'
gcc-4.4 -o ipv6.so -fPIC -fsigned-char -pipe …Run Code Online (Sandbox Code Playgroud) 我想将.c文件编译为.so(共享库).我不明白为什么,我有makefile让我出错:
LIB = libmy.so
SRC = lib.c
CC = gcc
OBJ = $(CC) -c -fPIC $(SRC)
all: $(LIB)
re: fclean all
$(LIB): $(OBJ)
$(CC) -shared -fPIC $(OBJ) -o $(LIB)
clean:
$(RM) $(OBJ)
fclean: clean
$(RM) $(LIB)
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
在我的原型文件proto.h中,我有
#define LOOP_LIMIT 90.00
#define PI 3.14159
#ifndef _PROTO_H
#define _PROTO_H
#include <stdio.h>
#include <math.h>
#include "get_problem.c"
#include "deg_to_rad.c"
#include "evaluate_sin.c"
#include "evaluate_cos.c"
#include "evaluate_tan.c"
int main(void);
int get_problem();
double deg_to_rad(int deg);
void evaluate_sin(int deg);
void evaluate_cos(int deg);
void evaluate_tan(int deg);
#endif
Run Code Online (Sandbox Code Playgroud)
在我的lab7.c中我有我的主要功能,我包括proto.h.当我尝试使用"make"命令在Linux上编译时,我收到以下消息:
gcc -c deg_to_rad.c deg_to_rad.c:在函数"deg_to_rad"中:
deg_to_rad.c:2:错误:"PI"未声明(首次在此函数中使用)
deg_to_rad.c:2:错误:(每个未声明的标识符仅报告一次
deg_to_rad.c:2:错误:对于它出现的每个函数.)
make:* [deg_to_rad.o]错误1
我真的不明白这一点,因为我的主要功能正确使用LOOP_LIMIT,但PI无效.
deg_to_rad.c:
double deg_to_rad(int deg) {
double rad = (PI * deg) / 180;
return rad;
}
Run Code Online (Sandbox Code Playgroud) 我是java和makefile的新手,我想了解一些关于makefile的介绍性信息.通常在网上找到的信息大多是示例和高级别的.以下是我对makefile的一些具体/天真的问题:
什么类型的文件是makefile的目标?.class和.java?
makefile对那些项目文件做了什么?我在Eclipse中完成了我的项目,因此.class文件存储在bin中,.java文件存储在scr中.makefile在这些文件之间建立了什么样的连接?
makefile的结果是什么?makefile的目的是告诉编译器如何生成可执行文件,因此结果是当前目录中的新可执行文件,是吗?
我应该在哪里放置makefile?在bin文件夹中?scr文件夹?将所有苍蝇混合在一个目录下并放在那里?
最后,我为我的项目制作了一个小的makefile,它应该编译3个类.它不起作用,我不知道为什么:
生成文件:
JFLAGS = -g
JC = javac
.SUFFIXES: .java .class
.java.class:
$(JC) $(JFLAGS) $*.java
CLASSES = \
DNA.java \
C.java \
fastmatch.java
default: classes
classes: $(CLASSES:.java=.class)
clean:
$(RM) *.class
Run Code Online (Sandbox Code Playgroud)
我做错什么了吗?我只需将所有内容放在一个文件夹下,然后在命令行中输入"make".我想我在这里错过了一些大图,所以如果有人能向我解释,我真的很感激.谢谢
我正在为我的结构课开展一个小项目,并且遇到一个问题,即使TA无法弄清楚.有人建议我在这里发帖,我可能会得到一些帮助.所以这里:
概述: 我正在使用g ++编译包含许多头(.h)文件及其相应实现(.cpp)文件的项目.该项目涉及3个独立的结构,并在它们之间进行时序比较.正在实现和比较的结构是二进制最小堆,左侧堆和倾斜堆.最小堆实现已完成,编译正常.但是现在我正在转向其他结构,我正在遇到我认为(我知道)编译器错误.
问题 我正在充实左派堆的存根文件,并且就编译器而言已经遇到了问题.特别是我收到的错误是:
leftHeap.cpp:15:1: error: ‘LeftistHeap’ does not name a type
Run Code Online (Sandbox Code Playgroud)
代码 这里是相关代码:
leftHeap.h
#ifdef LEFTHEAP_H
#define LEFTHEAP_H
class LeftistHeap{
public:
int *root;
LeftistHeap();
~LeftistHeap();
};
#endif
Run Code Online (Sandbox Code Playgroud)
leftHeap.cpp
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stdio.h>
#include <math.h>
#include "leftHeap.h"
using namespace std;
//Constuctor
LeftistHeap::LeftistHeap(){
root = NULL;
}
Run Code Online (Sandbox Code Playgroud)
包含leftHeap.h的唯一其他地方是main.cpp
main.cpp中
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stdio.h>
#include <math.h>
#include "minHeap.h"
#include "leftHeap.h"
#include "skewHeap.h"
using namespace std;
int main(){
...
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的makefile:
生成文件
all: lab10 …Run Code Online (Sandbox Code Playgroud) 我正在使用一个调用makefile的shell来重新编译具有不同#define选项的同一个项目.
shell调用makefile,如下所示:
make UserDefined="-D SomeDefines -D InputFileName=\"input/In$SIZE.txt\"" -s
Run Code Online (Sandbox Code Playgroud)
其中$ SIZE是一个数字变量,例如等于32,这对项目的所有文件编译好,但不是main.cpp,main.cpp的命令是:
g++ $(CFLAGS) $(Main) \
-I$(CUDA_HOME)/include \
-lpthread -o main.o
Run Code Online (Sandbox Code Playgroud)
$(Main)是输入文件的路径$(CUDA_HOME)是cuda库的路径,$(CFLAGS)是:CFLAGS = -c -Wall $(UserDefined)-std = c ++ 0x
执行此命令时,会发生以下错误:
../src/main.cpp: In function ‘int main()’:
../src/main.cpp:11:30: error: ‘input’ was not declared in this scope
../src/main.cpp:11:30: error: ‘In32’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
main.cpp文件中的第11行:
InputSignalFile.open(InputFileName);
Run Code Online (Sandbox Code Playgroud)
我从shell和命令行尝试了它.那没起效.我也试过"而不是".同样的错误.我尝试创建一个像这样的新变量:
Var=\"input/In$SIZE.txt\"
Run Code Online (Sandbox Code Playgroud)
然后 :
-D InputFileName=$Var
Run Code Online (Sandbox Code Playgroud)
也没用.但是当我#define InputFileName "input/In32.txt"在main.cpp中它工作正常.当然我不能这样做,因为我每次都需要更改数字.任何帮助?
我在下面第139行得到make文件错误,$(eval $(RULES))
我对make文件语法缺乏经验.这是我输入make命令时给出的错误.
common.mak:139: *** missing separator. Stop.
Run Code Online (Sandbox Code Playgroud)
我试图通过单个空格删除选项卡,\ t无效.你知道原因是什么吗?
谢谢
#
# common bits used by all libraries
#
# first so "all" becomes default target
all: all-yes
ifndef SUBDIR
ifndef V
Q = @
ECHO = printf "$(1)\t%s\n" $(2)
BRIEF = CC CXX HOSTCC HOSTLD AS YASM AR LD STRIP CP
SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM
MSG = $@
M = @$(call ECHO,$(TAG),$@);
$(foreach VAR,$(BRIEF), \
$(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
$(foreach …Run Code Online (Sandbox Code Playgroud)