我有一个makefile:
CFLAGS= -Wall -g
all: ex1.c
cc ex1.c -o ex1
valgrind ./ex1
cc ex2.c -o ex2
valgrind ./ex2
cc ex3.c -o ex3
valgrind ./ex3
clean:
rm -f ex1
rm -f ex2
rm -f ex3
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以简化这个,所以我不需要为每个文件添加3行(我期待~50个文件)而是我可以只插入一个数字,它将运行该数量的文件的命令?所有文件都具有相同的命名方案/^ex\d{1,}\.c/,并且都在同一目录中.
谢谢您的帮助.
我需要帮助为多个.hpp和.cpp文件创建一个正确的makefile(支持增量编译).
我一直在寻找有关如何创建正确的makefile的信息,但我不确定如何做到这一点.
我有以下文件:2048.cpp,game.cpp,game.hpp,gameutils.cpp,gameutils.hpp,menu.cpp,menu.hpp,saveandback.cpp,saveandback.hpp和tile.hpp
现在我正在使用以下makefile:
all: 2048.cpp tile.hpp menu.hpp menu.cpp gameutils.hpp gameutils.cpp saveandback.hpp saveandback.cpp game.hpp game.cpp
g++ -g -W -Wall --pedantic -DNDEBUG 2048.cpp -o power
clean:
$(RM) power
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
我实际上是在一个大项目中.我理解代码的第一步是搜索main函数,以便我对架构有一个愿景.
我发现的是有不止一个主要功能.确实,它们位于不同的文件夹中,但我不明白这个应用程序是如何成功构建的.我所知道的是链接器需要一个main函数(入口点).
我相信很难理解应用程序的构建过程,所以我问,因为你们当中有些人遇到过这个问题.
1 - 我是否应该有理论背景来理解这一点?如果是这样,请建议我的文章,书籍,你想要什么.
2 - 我们什么时候必须main在一个应用程序中使用多个功能?
在一个程序中,我有一个list.c文件,list.h文件和run.c文件.在run.c文件中,代码包含我的主程序和"#include list.h".在我的list.h文件中,我的函数只是无效并被定义.最后,在我的list.c文件中,我再次包含list.h,并且我具有每个函数将要执行的操作的含义和代码.我制作了一个看起来像这样的makefile:
SOURCES = run.c list.c
OBJECTS= run.o list.o
HEADERS = list.h
CC = gcc
CFLAGS = -g -Wall
lab1: $(OBJECTS)
(tab) $(CC) $(CFLAGS) $(OBJECTS) -o lab1
clean:
(tab) rm -fR *o lab1
Run Code Online (Sandbox Code Playgroud)
我的任何代码都没有错,因为它已经完成,我只是在复制代码.但是,我不确定如何使用makefile来运行这些多个文件.在使用gcc编译并使用"./"后,我只熟悉运行程序文件.我的makefile有什么问题,或者是否有以不同方式编译这些文件的步骤?
感谢您的任何帮助
我试图在OSX 10.11.2上安装一个名为Valgrind的调试器.
运行make时,我收到以下错误
Undefined symbols for architecture i386:
"___ctzdi2", referenced from:
_doRegisterAllocation in libvex-x86-darwin.a(libvex_x86_darwin_a-host_generic_reg_alloc2.o)
ld: symbol(s) not found for architecture i386
make[3]: *** [memcheck-x86-darwin] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
你知道怎么解决这个问题吗?
这是一项家庭作业.我有一个makefile,默认使用编译可执行文件
gcc -o myprogram myprogram.c
在分配,我们应该使3个额外的使情况:"这个makefile还有应该支持使用这些3例插入10秒的休眠到程序的3个不同的预定部位make test1,make test2,make test3.
我知道如何使用make从默认情况下有这样的额外情况,但我的问题是在编译可执行文件之前可以使用makefile将代码插入myprogram.c吗?或者我是否必须创建myprogram1.c myprogram2.c等,然后将其用于案例?
谢谢!
创建makefile时,我写道
test: main.o 1.o
gcc -o test main.o 1.o
main.o: main.c a.h
gcc -c main.c
1.o: 1.c a.h
gcc -c 1.c
Run Code Online (Sandbox Code Playgroud)
但是我不明白为什么我在第一行中使用-o并在第二,第三行中使用-c。它们之间有什么区别?
这是我的项目:
project
|--- main.cpp
|--- makefile
|--- test
|--- Test.cpp
|--- Test.h
Run Code Online (Sandbox Code Playgroud)
这是makefile:
g++1x:=g++ -std=c++14 -stdlib=libc++ -MMD -MP
cflags:= -Wall -lncurses
PATHS:=./ ./test/
TARGET:=matrix.out
SRC:=$(foreach PATH,$(PATHS),$(wildcard $(PATH)/*.cpp))
OBJDIR:=.obj
OBJ:=$(addprefix $(OBJDIR)/,$(notdir $(SRC:.cpp=.o)))
.PHONY: install
install: $(OBJDIR) $(TARGET)
$(OBJDIR):
mkdir -p $(OBJDIR)
$(TARGET): $(OBJ)
$(g++1x) $(cflags) -o $@ $^ -g
$(OBJDIR)/%.o: %.cpp
$(g++1x) -c -o $@ $< -g
$(OBJDIR)/%.o: ./test/%.cpp
$(g++1x) -c -o $@ $< -g
-include $(addprefix $(OBJDIR)/,$(notdir $(SRC:.cpp=.d)))
.PHONY: clean
clean:
rm -f $(TARGET)
rm -rf $(OBJDIR)
Run Code Online (Sandbox Code Playgroud)
它运作良好,但我有两个问题: …
我已经创建hello.c并Makefile在/home/coder/workspace/test_module目录中。我正在使用Arch Linux。我已经安装好了linux-headers。
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void){
printk(KERN_ALERT, "hello, this is hello module");
return 0;
}
static void hello_exit(void){
printk(KERN_ALERT, "exiting the hello module");
}
module_init(hello_init);
module_exit(hello_exit);
Run Code Online (Sandbox Code Playgroud)
obj-m=hello.o
KDIR = /usr/lib/modules/$(shell uname -r)/build
all :
make -C $(KDIR) M=$(PWD) modules
clean :
rm -rf *.o *.ko *.mod.* *.symvers *.order
Run Code Online (Sandbox Code Playgroud)
[coder@coder test_module]$ make
make -C /usr/lib/modules/4.10.13-1-ARCH/build M=/home/coder/workspace/test_module modules
make[1]: Entering directory '/usr/lib/modules/4.10.13-1-ARCH/build'
CC [M] /home/coder/workspace/test_module/hello.o
In file included …Run Code Online (Sandbox Code Playgroud) 我试图让我的Makefile只在文件发生变化时才重新编译,它对Java目标起着很好的作用,但不适用于JS.报告没有任何错误,但是当我make bundle第二次运行时,它仍然会重新运行所有这些命令.
find ...手动运行的输出似乎产生了预期的结果,没有额外或缺少的线.
JAVA_SRC_DIR := .
JAVA_SOURCES := $(shell find $(JAVA_SRC_DIR) -name '*.java' -o -name '*pom.xml')
JS_SRC_DIR := ./ui-bundle
JS_EXCLUDE := \(node_modules\|coverage\)
JS_SOURCES := $(shell find $(JS_SRC_DIR) -name '*.js' -o -name '*.jsx' -o -name '.babelrc' -o -name 'package.json' | grep -v $(JS_EXCLUDE) | grep -v -e '^$')
bundle: $(JS_SOURCES)
npm install
./node_modules/jest-cli/bin/jest.js --verbose
./node_modules/gulp/bin/gulp.js package
service: $(JAVA_SOURCES)
mvn clean install -pl "!integration"
Run Code Online (Sandbox Code Playgroud)
我猜这与它有关,但是当我试图找到哪些文件make认为已经改变时make -d | grep "\(older\|newer\)"它没有找到任何东西,但make -d最后得出结论:
Finished prerequisites …Run Code Online (Sandbox Code Playgroud)