簡體   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