目录
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)