Makefile 如何从g+;中排除文件+;编译器选项

Makefile 如何从g+;中排除文件+;编译器选项,makefile,g++,compiler-warnings,Makefile,G++,Compiler Warnings,我想用-Wconversion-Werror编译大部分代码 问题是我使用的.cpp文件是开源的,不应该修改,使用这些标志编译失败,因为特定的.cpp文件存在一些“可能改变值的隐式转换”问题 我是否可以指示构建使用-Wconversion-Werror编译所有其他文件,但不使用这些标志编译该文件?make实用程序提供了一组丰富的工具,用于自定义构建和默认隐式过程,以实现常规逻辑。如果存在与gcc工具链相关的问题,那么这是一个很好的起点 实际上,makefile包含用于构建项目的自定义逻辑。规则由一

我想用-Wconversion-Werror编译大部分代码

问题是我使用的.cpp文件是开源的,不应该修改,使用这些标志编译失败,因为特定的.cpp文件存在一些“可能改变值的隐式转换”问题


我是否可以指示构建使用-Wconversion-Werror编译所有其他文件,但不使用这些标志编译该文件?

make实用程序提供了一组丰富的工具,用于自定义构建和默认隐式过程,以实现常规逻辑。如果存在与gcc工具链相关的问题,那么这是一个很好的起点

实际上,makefile包含用于构建项目的自定义逻辑。规则由一行上的冒号将一个明显的目标与依赖项分开,然后(可能是零个或多个)后续行上的配方由一个制表符缩进,该制表符解释构建该目标的步骤。为了便于维护项目,还可以定义虚假目标,例如清洁


如果存在特定于目标的规则,则将优先于任何隐式规则使用该规则来构建该目标。OP可能只需要向现有的makefile中添加一个特定于目标的规则,该规则将控制编译器选项的使用(从源代码构建对象)。

make实用程序提供了一组丰富的工具,用于自定义构建和默认为例程逻辑的隐式过程。如果存在与gcc工具链相关的问题,那么这是一个很好的起点

实际上,makefile包含用于构建项目的自定义逻辑。规则由一行上的冒号将一个明显的目标与依赖项分开,然后(可能是零个或多个)后续行上的配方由一个制表符缩进,该制表符解释构建该目标的步骤。为了便于维护项目,还可以定义虚假目标,例如清洁


如果存在特定于目标的规则,则将优先于任何隐式规则使用该规则来构建该目标。OP可能只需要将特定于目标的规则添加到现有的makefile中,该规则将控制编译器选项的使用(从源代码构建对象)。

当然可以告诉
make
使用不同的选项将源代码编译成目标文件,然后将目标文件链接到一个可执行文件中,并根据需要提供尽可能多的规范。您是在寻找一个示例,还是一种适合您的情况的定制方法?当我撰写我的想法时,以下是供将来参考的示例。上述链接教程中的“简单生成文件”避免了生成对象文件的任何“一般”规则,并为每个此类文件详细说明了编译器的“配方”。简单的回答是对特殊的源文件有一个特殊的规则,然后是一个通配符驱动的配方。当然,
make
可以被告知使用不同的选项将源文件编译成目标文件,然后将目标文件链接到一个可执行文件中,并根据您的要求提供尽可能多的规范。您是在寻找一个示例,还是一种适合您的情况的定制方法?当我撰写我的想法时,以下是供将来参考的示例。上述链接教程中的“简单生成文件”避免了生成对象文件的任何“一般”规则,并为每个此类文件详细说明了编译器的“配方”。因此,简单的答案是对特殊的源文件有一个特殊的规则,然后对所有其他文件使用一个通配符驱动的方法。唯一的缺点是GNU Make出现了一个恼人的错误。例如,在我的一个项目中,我得到了“警告:覆盖target`unit tests/tests-a-main.cpp`的配方”,但这不是一个show-stopper。唯一的缺点是GNU Make的一个恼人错误。例如,在我的一个项目中,我得到了“警告:覆盖target`unittests/tests-a-main.cpp`的配方”,但这并不是一个阻碍。