繁体   English   中英

C ++,g ++,基于主机名的条件编译?

[英]C++, g++, conditional compilation based on host name?

我遇到以下问题:

我们的测试环境无法完全模拟生产环境的某些硬件部分,因此在测试应用程序时需要排除某些代码。

因此,我需要某种方式

 #IFNDEF testing_env
 //code to exclude
 #ENDIF

如果我包含#DEFINE testing_env ,这将很好地工作,但是像这样,我需要在每次切换环境时手动注释/取消注释此定义。

我正在寻找一种基于主机名或类似功能的方法。 我试图寻找基于环境变量的条件编译,但是显然这是不可能的。

通常,您为测试环境(专用的制造规则)创建一个特定的构建配置文件,并为其他环境创建另一个构建配置文件(其他构建规则)。

然后,可以在编译行(通常在Makefile中)中使用-DTEST_ENVIRONMENT指定测试环境。 -D选项的使用:

g++ -DTEST_ENVIRONMENT -o test main.c

然后

#IFNDEF TEST_ENVIRONMENT
//code to exclude
#ENDIF

会很好的工作。

您的Makefile可以确定主机名,并使用-D为您的构建设置特定的变量:

例:

HOSTNAME=$(shell hostname)

ifeq ($(HOSTNAME), localhost1.localdomain)
    ANY_VAR=COMPILE_VERSION_1
else
    ANY_VAR=COMPILE_VERSION_2
endif

$(info $(HOSTNAME))
$(info $(ANY_VAR))

%.o: %.cpp
    g++ -D$(ANY_VAR) $< -c

OBJECTS=main.o

go: $(OBJECTS)
    g++ $^ -o go

clean:
    rm -f *.o
    rm -f go

您的C / C ++可以在以下变量中使用此var:

#include <iostream>

#ifdef COMPILE_VERSION_1
std::string x="Version1";
#endif

#ifdef COMPILE_VERSION_2
std::string x="Version2";
#endif

int main()
{   
    std::cout << x << std::endl;
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM