c++ - 检查文件是否在 Makefile 中使用某些标志编译

标签 c++ c makefile

我的项目中有多个文件使用 -fPIC 或不使用此选项编译为目标文件。编译这些文件以在共享库中使用时,此选项是必需的,否则不是。因此,当我将项目编译成共享库时,这个选项是必需的。
尽管如此,我永远不确定最后一次编译是否已完成到共享库中。如果没有,我想编译成共享库,编译失败,只好删除生成的目标文件。这些目标文件的重新编译需要相当多的时间,我想避免这种情况。
有没有办法让 makefile 检测目标文件是否在一开始就使用或不使用此选项进行编译,以便编译可以继续,或者两者都必须重新编译,而不会产生错误或花费很多不必要的重新编译循环中的时间?

最佳答案

问:“makefile 有没有办法检测目标文件是否已使用或不使用此选项编译”

简答:否

长答案:如果可以使用不同的选项构建源文件并且您必须同时访问不同的构建,那么您必须有多个输出文件夹。并且 makefile 必须在正确的文件夹中生成它们。 对于简单的调试/发布(“-g”标志)说这样的话:

|
-src
-include
-BUILD
  |
  -obj
  | -debug
  | -release
  -bin
    |-debug
    |-release

当然,这种方法有局限性。例如,如果您需要同时拥有“调试/发布”和“PIC/非 PIC”,那么您将需要 4 个输出文件夹。

您还可以将我的方法与@BasileStarynkevitch 提出的方法(生成特定名称)混合使用。

关于c++ - 检查文件是否在 Makefile 中使用某些标志编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48150258/

相关文章:

c++ - 我可以在多核 x86 CPU 上强制缓存一致性吗?

构建三角函数计算器的 C++ 程序

c++ - 如何将 string.erase() 与指针一起使用?

c - 一个用 C 语言确定字符串回文串最少插入次数的程序。我得到的错误是标准输出丢失

c - C中的双函数间接

c - 消息同步算法

c++ - 从OS读取正在运行的进程并通过C++显示!

c - 如何使用子目录中的 Makefile 进行编译?

c++ - "make"使用模式匹配时失败

c - 多个定义,即使我正在使用 extern 并包含守卫