万能Makefile的使用案例

目录

1. 通用Makefile 的使用案例

2. 使用CMake 进行开发编译


1. 通用Makefile 的使用案例

        大家平时在开发过程中,总是进行抄来抄去的烦人Makefile,并且抄来之后还需要进行修改,这块就更头疼,因此,趁着有空进行编写通用的Makefile,以便于大家没必要花费大量心思在无用的事情之上。

        通用Makefile 如下所示:

TARGET_EXEC:=test_demo
OBJ_DIR:=$(shell pwd)

EXCLUDE_DIR:=

SRC_DIR:=$(filter-out $(EXCLUDE_DIR), $(shell find . -maxdepth 4 -type d))

SRC_C:=$(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.c))

TARGET_OBJ:=$(patsubst %.c, $(OBJ_DIR)/%.o, $(SRC_C))

INC_FLAGS:=$(patsubst %, -I%, $(SRC_DIR))

CFLAGS+=$(INC_FLAGS)

#使用自己的依赖库即可
LDFLAGS+=

all:$(TARGET_EXEC)

$(TARGET_EXEC):$(TARGET_OBJ)
        $(CC) $(CFLAGS) -o $@ $(TARGET_OBJ) $(LDFLAGS)

${OBJ_DIR}/%.o: ${SRC_DIR}/%.c
        $(CC) $(CFLAGS) -c $< -o $@

.PHONY:clean
clean:
        @rm $(TARGET_EXEC) -rf
        @rm $(TARGET_OBJ) -rf

        注意,具体开发过程中依赖的库需要自己进行填写,如果没有依赖,则直接编译即可。

2. 使用CMake 进行开发编译

cmake_minimum_required(VERSION 3.0)

message(STATUS "CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")
##可以使用配置文件进行加载不同的编译链
## 例如:
##      toolchain.make
##      文件内容:
##           set(CMAKE_C_COMPILER gcc)
##           set(CMAKE_CXX_COMPILER g++)
##
include(${CMAKE_CURRENT_SOURCE_DIR}/tools/toolchain.cmake)

message(STATUS "CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")

message("CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
message("CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")

project(DEMO)

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE MinSizeRel)
endif()

message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")

# set(CMAKE_VERBOSE_MAKEFILE ON)
# 版本说明
if(NOT BUILD_VERSION)
    set(BUILD_VERSION 2022.12.3.001)
endif()

message(STATUS BUILD_VERSION ": ${BUILD_VERSION}")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s -std=c++11")

execute_process(
    COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/output
)
# 可以使用多个进程同时编译
add_subdirectory(demo)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值