2、最简单的Makefile管理小项目demo(实现单链表插入)

1、项目结构

 2、main.c文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "linklist.h"


int main(){
	
	struct LinkNode *head_node = initLinkNode();
    add_LinkList(head_node);
    printf("\n");
	foreach_LinkList(head_node);
    return 0;
}

3、linklist.h文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//定义链表结构体
struct LinkNode{
    int num;
    struct LinkNode *next;
};

//初始化链表
struct LinkNode * initLinkNode();
//带头结点的链表,从头插入
void add_LinkList(struct LinkNode *head_LinkList);
//遍历链表
void foreach_LinkList(struct LinkNode *head_LinkList);

4、linklist.c文件


#include "linklist.h"

struct LinkNode * initLinkNode(){
    
    struct LinkNode * headNode = malloc(sizeof(struct LinkNode));
    headNode->num = -1;
    headNode->next = NULL;

    return headNode;
}

void add_LinkList(struct LinkNode *head_LinkList){
        int val = -1;

        while(1){
            printf("请输入一个数据,输入-1代表退出\n");
            scanf("%d",&val);
            if (-1 == val){
                break;
            }
            struct LinkNode * new_Node = malloc(sizeof(struct LinkNode));
            new_Node->num = val;
            new_Node->next = NULL;
            if (head_LinkList->next != NULL){
                new_Node->next = head_LinkList->next;
            }
            
            head_LinkList->next = new_Node;
        
        }

}

void foreach_LinkList(struct LinkNode *head_LinkList){
    if (head_LinkList == NULL)
    {
        return;
    }
    struct LinkNode * new_Node = head_LinkList->next;
    while (new_Node != NULL)
    {
        printf("%d\n",new_Node->num);
        new_Node = new_Node->next;
    }
    
    
}

5、Makefile文件

CC := gcc
TARGET ?= target	#定义目标文件

MAIN_FILES := ./main.c	#主函数

INCDIRS := inc	#包含.h文件的目录
SRCDIRS := src	#包含.c文件的目录

INCLUDE	:= $(patsubst %, -I %, $(INCDIRS))	#将包含.h文件的所有目录加上 -I
CFILES	:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))	#查找到指定目录的所有.c文件

#$@:表示目标文件
#$^:表示所有的依赖文件
#$<:表示第一个依赖文件;$?:表示比目标还要新的依赖文件列表
$(TARGET):$(MAIN_FILES) $(CFILES) 
	$(info target: $@)	
	$(info all: $^)		
	$(info first: $<)	
	$(info SRC_DIRS_all: $(CFILES))
	$(CC) -o $@ $^ $(INCLUDE) 

.PHONY : clean
clean:
	rm $(TARGET)

链接:https://pan.baidu.com/s/1BAt6awRUZN87OUkY3cf_rg?pwd=srwf 
提取码:srwf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑三少_Creat

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值