Makefile入门二、理解$@、$^和$

文章目录

    • 一、理解\$@、\$^、\$<的含义
    • 二、举例
    • 三、简提Makefile中打印日志信息

前面简单记录了一下Makefile中helloworld的用法,这次来理解一些$@、$^、$<的含义

一、理解$@、$^、$<的含义

Makefile中,格式为这样的

target : prerequisties
目标:需要依赖的条件
简单的工程直接这样

hello:hello.cc
	gcc  hello.cc -o hello

但如果文件多了呢?按部就班写会显得很长,所有这时候makefile中的常用命令就产生了,如下:

$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表

二、举例

工作作用,将头文件放在include文件夹,cpp文件放在source文件夹,test.cc为可执行文件
工程目录:
.
├── include
│ ├── myString.h
│ └── utils.h
├── Makefile
├── source
│ ├── myString.cpp
│ └── utils.cpp
└── test.cc

Makefile文件为

TARGET = test.out

CXXFLAGS += -std=gnu++11
CC = g++
#主函数文件
CXX_FILES := ./test.cc

#cpp文件
SRC_DIRS := ./source/myString.cpp
SRC_DIRS += ./source/utils.cpp

INC_DIRS := -I ./include

LIBS += -lstdc++
LIBS += -ldl -lpthread


$(TARGET):$(CXX_FILES) $(SRC_DIRS) 
	$(info target: $@)
	$(info all: $^)
	$(info first: $<)
	$(info SRC_DIRS_all: $(SRC_DIRS))
	$(CC) -o $@ $^ $(INC_DIRS) $(CXXFLAGS) $(LIBS)


.PHONY:clean
clean:
	rm -rf $(TARGET)

输出结果如下
输出结果

三、简提Makefile中打印日志信息

打印用info,Makefile提供了三个命令

$(warning "the value of LOCAL_PATH is$(FILE)")
$(info "the value of LOCAL_PATH is$(FILE)")
$(eror "the value of LOCAL_PATH is$(FILE)")

你可能感兴趣的:(CMake&&Make)