GCC:检查是否编译为库或可执行文件

时间:2016-01-20 12:25:38

标签: c++ gcc

我有一些类实现,它将作为Lib运行。 但是,我希望在该库中包含一个memory.py函数,并使用一个简单的驱动程序来测试我的类。因此,只有在我将编译目标定义为可执行文件时,才能编译函数main

这可以通过一些宏或类似的方式来完成吗?

我不想创建一个新项目,也不想创建Makefile,只需要一个简单的main包装主函数就可以完成这项工作。

2 个答案:

答案 0 :(得分:2)

您可以使用GCC的-D选项定义宏。例如,您可以使用选项_RELEASE定义宏-D_RELEASE并包装如下:

#ifdef _RELEASE
// Release main
int main()
{
    // ...
}

#else
// Another main
int main()
{
    // ...
}

#endif

您可以通过将-D_RELEASE添加到编译行来编译主编号:

gcc main.c -D_RELEASE [other flags] # compile with release main
gcc main.c [other flags] # compile with other main

这是main函数的示例,但当然可以为库中的任何函数实现。

答案 1 :(得分:0)

不,这不能由宏来完成。错误的编译阶段。 C和C ++都有3个相关步骤:Per Translation Unit,预处理器和编译器本身都可以运行。最后,TU由链接器链接在一起。

在预处理或编译单个TU时,您无法知道其他TU可能包含的内容,或者您​​将链接到哪些内容。实际上,makefile很可能以任何一种方式定义规则。例如。 file1.obj可能两者进入A.LIB和A.EXE。