繁体   English   中英

如何在 C (LINUX) 中使用 makefile 执行某个部分

[英]How to execute a certain part using makefile in C (LINUX)

我正在开发一个调用 2 个函数func1()func2()C program

这是代码

void func1(void){/*...*/}
void func2(void){/*...*/}

int main(){
    func1();
    func2();
    
    return 0;
}

有没有一种方法,当我使用makecertain flag compile程序时,它只执行func1() ,如果我使用另一个标志编译,那么它只执行func2()

如何制作这样的makefile 谁能为我提供一个 makefile 来完成这项工作?

您可以使用编译器的-D标志:

cc -o demo demo.c -Dfunc=func1

然后

#include <stdio.h>

void func1(void) { puts("1"); }
void func2(void) { puts("2"); }

int main(void)
{
    func();
    return 0;
}

Output:

1

您还可以将 function 作为参数传递给make

CC = gcc
CFLAGS = -std=c11 -Wpedantic -Wall

action: demo.c
    $(CC) $(CFLAGS) demo.c -o demo -Dfunc=$(argument)

clean:
    rm -f demo

调用make使用:

make action argument=func1

或者

make action argument=func2

但如果你真的想这样做:

int main(){
    func1();
    func2();

main中调用这两个函数,你应该使用另一种方法(虽然这个解决方案对我来说似乎很棘手):

#include <stdio.h>

void func0(void) { /* do nothing */ }
void func1(void) { puts("1"); }
void func2(void) { puts("2"); }

#ifdef delete_func1
#define func1 func0
#endif

#ifdef delete_func2
#define func2 func0
#endif

int main(void)
{
    func1();
    func2();
    return 0;
}

编译使用:

cc -o demo demo.c -Ddelete_func1

或者

cc -o demo demo.c -Ddelete_func2

那么Makefile应该如下所示:

CC = gcc
CFLAGS = -std=c11 -Wpedantic -Wall

func1: demo.c
    $(CC) $(CFLAGS) demo.c -o demo -Ddelete_func2

func2: demo.c
    $(CC) $(CFLAGS) demo.c -o demo -Ddelete_func1

clean:
    rm -f demo

调用它使用:

make func1

或者

make func2

您可以使用-D两次删除这两个函数:

cc -o demo demo.c -Ddelete_func1 -Ddelete_func2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM