[英]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;
}
有没有一种方法,当我使用make
和certain 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.