我有一个未使用的私有变量只出现在一个C ++源文件中,我不想修复它,因为它将来会被使用,我想知道是否有任何其他文件最终出现此错误,所以我我想将-Wno-unused-private-field
添加到一个源文件的规则中。我怎样才能指示gnumake只为一个源文件的编译添加-Wno-unused-private-field
?我已经通过CXXFLAGS变量进入-Wall
,如何为该变量添加另一个值,但仅针对一个文件的编译?我想将它限制在一个平台(Mac):
ifeq "$(BUILD_HOST_ARCH_NAME)" "darwin"
CXXFLAGS += -Wno-unused-private-field
endif
但我如何将其限制为只有一个文件foo.cpp
?
答案 0 :(得分:2)
假设您使用的是Clang,您可以在源代码中使用#pragma
来控制它:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-private-field"
class A {
private:
int unused;
};
#pragma clang diagnostic pop
class B {
private:
// This still produces a warning
int unused;
};
答案 1 :(得分:2)
您可以使用target-specific variable value。与平台检查一起,它看起来像这样:
ifeq "$(BUILD_HOST_ARCH_NAME)" "darwin"
foo.o: CXXFLAGS += -Wno-unused-private-field
endif
答案 2 :(得分:0)
最容易想到的答案就是这个。
我不确定$(BUILD_HOST_ARCH_NAME)
来自哪里。如果你还没有它,第一行就是评估它,假设你的shell中只有一个有效的uname
命令。这足以将Darwin与Linux区分开来,但对Windows来说可能还不够好。
BUILD_HOST_ARCH_NAME = $(shell uname -s)
CXXEXTRAFLAGS =
ifeq "$(BUILD_HOST_ARCH_NAME)" "Darwin"
CXXEXTRAFLAGS += -Wno-unused-private-field
endif
foo.o: foo.cpp
$(CXX) $(CXXFLAGS) $(CXXEXTRAFLAGS) $< -o $@
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -o $@
然后,在Mac上:
$ make -n foo.o
c++ -Wno-unused-private-field foo.cpp -o foo.o
$ make -n bar.o
c++ bar.cpp -o bar.o
答案 3 :(得分:0)
如果启用了 C++17 并且您需要将其应用于严格数量的文件,则可以使用 [[maybe_unused]]
#include <cassert>
[[maybe_unused]] void f([[maybe_unused]] bool thing1,
[[maybe_unused]] bool thing2)
{
[[maybe_unused]] bool b = thing1 && thing2;
assert(b); // in release mode, assert is compiled out, and b is unused
// no warning because it is declared [[maybe_unused]]
} // parameters thing1 and thing2 are not used, no warning
int main() {;}