这是什么意思:#pragma comment(lib, "lib/glut32.lib")?

3

我看到了一个GLUT演示的顶部代码,并对其功能感到好奇。

为什么有人想要编写#pragma而不是只包含库呢?


参见:https://dev59.com/snI-5IYBdhLWcg3wwbdM - martin clayton
3个回答

3
这个编译指示允许库的作者根据可以在编译时分析的一系列标准来定义库的导入。例如,您可以链接到不同的库,具体取决于您想要链接的内容,例如:
  • 启用或禁用多线程;
  • 所需库的共享或静态版本;
  • 所需标准运行时库的共享或静态版本;
  • 调试版或发布版库;
  • 32位或64位库。
使用编译指示形式,所有这些都可以通过库的一个头文件中的#ifdef预处理器测试来决定。

1

#pragma 在分发库时非常有用。特别是当您有不同的已编译 .libs 用于不同的构建设置(例如,调试与发布、多线程 C 运行时与单线程、DLL 与静态库等)时。您可以在代码中使用 #ifdef 选择正确的 .lib 文件,而不是要求用户设置其构建环境以选择正确的文件。

它可以降低支持时间,因为您的用户无法选择错误的 .lib 文件。


1

这是一个MSVC特定的编译指示符,意味着命名库将在链接时自动包含。你关于“仅包含库”的问题暗示了你没有理解头文件和库之间的区别:头文件(GL/glut.h)描述了编译器可以在链接时期望的函数。库(lib/glut32.lib)提供了这些函数的实现。

正如其他答案所解释的那样,使用这个功能可能很方便,但我个人认为这是一个糟糕的想法,因为它增加了编写可移植代码的另一个障碍(其他平台和编译器可能不支持它)。这个问题(感谢@martin clayton)解释了为什么对于可移植代码来说这不是一个好主意。


其他(流行的)编译器没有相应的功能吗?GCC有类似的东西吗? - Robinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接