标签: makefile

Makefile中类似命令的简化

我有一个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/,并且都在同一目录中.

谢谢您的帮助.

c makefile gnu-make

0
推荐指数
1
解决办法
112
查看次数

编写.cpp和.hpp c ++的makefile

我需要帮助为多个.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)

谢谢您的帮助.

c++ makefile

0
推荐指数
1
解决办法
549
查看次数

C应用程序中的两个主要功能

我实际上是在一个大项目中.我理解代码的第一步是搜索main函数,以便我对架构有一个愿景.

我发现的是有不止一个主要功能.确实,它们位于不同的文件夹中,但我不明白这个应用程序是如何成功构建的.我所知道的是链接器需要一个main函数(入口点).

我相信很难理解应用程序的构建过程,所以我问,因为你们当中有些人遇到过这个问题.

1 - 我是否应该有理论背景来理解这一点?如果是这样,请建议我的文章,书籍,你想要什么.

2 - 我们什么时候必须main在一个应用程序中使用多个功能?

c makefile build

0
推荐指数
1
解决办法
81
查看次数

如何在有多个文件的情况下运行C程序?

在一个程序中,我有一个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有什么问题,或者是否有以不同方式编译这些文件的步骤?

感谢您的任何帮助

c makefile

0
推荐指数
1
解决办法
320
查看次数

未定义的符号___ctzdi2

我试图在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 undefined-symbol

0
推荐指数
1
解决办法
394
查看次数

makefile可以用来插入代码吗?

这是一项家庭作业.我有一个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等,然后将其用于案例?

谢谢!

c makefile gnu-make

0
推荐指数
1
解决办法
71
查看次数

gcc'-c'和gcc'-o'是什么意思?

创建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。它们之间有什么区别?

linux gcc putty makefile

0
推荐指数
1
解决办法
4770
查看次数

makefile:子目录的模式规则

这是我的项目:

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)

它运作良好,但我有两个问题: …

c++ makefile pattern-matching

0
推荐指数
1
解决办法
1995
查看次数

printk的Linux内核模块错误:格式参数过多

我已经创建hello.cMakefile/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)

c linux makefile kernel-module

0
推荐指数
1
解决办法
899
查看次数

Makefile重新编译未更改的文件

我试图让我的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)

build-automation makefile

0
推荐指数
1
解决办法
74
查看次数