【问题标题】:g++ -D flag add definition to Object fileg++ -D 标志将定义添加到目标文件
【发布时间】:2015-11-10 06:07:11
【问题描述】:

好的,所以我最近才开始在 g++ 编译器中使用 -D 标志以不同方式编译代码。

但是我遇到了一个问题,使用 -D 标志编译一个文件,我需要在后续文件中继续使用它。

例如,我有 2 个文件:

sardine.hpp sardine.cpp

并且这两个文件都有由以下内容包围的部分:

  #ifdef PLANKTON
  #endif

然后我使用以下代码编译它:

g++ -c -D PLANKTON sardine.cpp -o sardine.o

如果我想在另一个编译中使用指向这个的链接,为了让代码正常工作,我将不得不再次使用 D 标志(据我所知),例如:

g++ -D PLANKTON tuna.cpp sardine.o -o tuna

有没有办法在编译时永久添加定义?这样我下次编译时就不必添加 -D 标志了吗?

对不起,如果我错过了什么:'(

谢谢!

【问题讨论】:

  • 每个编译过程都是完全独立的。当编译器解析您的 .cpp 源时,它只能对特定实例拥有的信息进行操作。正如其他人所说,您可能想考虑使用 make 或其他构建系统来更好地管理您的编译设置。您还可以将#define PLANKTON 放在它们都包含的共享头文件中,然后只在一个地方在重建之间对其进行修改,这将使您的命令行更简单。
  • @notmyfriend Ahh 将定义包含在公共标头中可能是可行的方法。该死的太专注于让 -D 标志起作用了:P,谢谢!

标签: c++ linker g++


【解决方案1】:

我会使用生成文件。您可以在其中定义编译并设置标志,这样您就不必每次都输入所有内容。

查看本教程:

https://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/makefile.html

【讨论】:

  • 我其实每次都是用脚本编译的。每次更改构建结构时都比修改makefile要容易一些(我目前仍在对项目进行原型设计)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多