如何在 C 中使用 makefile 执行特定部分 (LINUX)
How to execute a certain part using makefile in C (LINUX)
我正在开发一个 C program
调用 2 个函数,func1()
和 func2()
。
这是代码
void func1(void){/*...*/}
void func2(void){/*...*/}
int main(){
func1();
func2();
return 0;
}
有没有一种方法,当我 compile
使用 make
和 certain flag
的程序时,它只执行 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;
}
输出:
1
您也可以将函数作为参数传递给 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
我正在开发一个 C program
调用 2 个函数,func1()
和 func2()
。
这是代码
void func1(void){/*...*/}
void func2(void){/*...*/}
int main(){
func1();
func2();
return 0;
}
有没有一种方法,当我 compile
使用 make
和 certain flag
的程序时,它只执行 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;
}
输出:
1
您也可以将函数作为参数传递给 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