您可以将宏用于其他文件中的主要功能。当编译为库时,将其定义为sample1_main
(使用 gcc -D 选项),否则定义为main
. 尝试类似的东西,
sm1.c:
#include <stdio.h>
#ifndef S1_MAIN
#define S1_MAIN main
#endif
int S1_MAIN( int argc, char ** argv)
{
printf( "This is (sample1_main)\n" );
return 0;
}
sm2.c:
#include <stdio.h>
#ifndef S2_MAIN
#define S2_MAIN main
#endif
int S2_MAIN( int argc, char ** argv)
{
printf( "This is (sample2_main)\n" );
return 0;
}
主.c:
#include <stdio.h>
#include <string.h>
int sample1_main(int , char ** );
int sample2_main(int , char ** );
int main(int argc, char ** argv)
{
if (argc > 1)
{
if (strstr(argv[1], "sample1")) return sample1_main(argc, argv);
else if (strstr(argv[1], "sample2")) return sample2_main(argc, argv);
}
printf("Not sure what I should run.\n");
return 0;
}
编译:( 作为单个二进制文件)
gcc -Wall -DS1_MAIN="sample1_main" -DS2_MAIN="sample2_main" main.c sm1.c sm2.c -o main
./main
Not sure what I should run.
./main sample1
This is (sample1_main)
./main sample2
This is (sample2_main)
编译:( 作为单独的二进制文件)
gcc -Wall sm2.c -o sm2
gcc -Wall sm1.c -o sm1
./sm1
This is (sample1_main)
./sm2
This is (sample2_main)
注意:我已经修复了主文件来检查命令行参数。