2014-07-21 78 views
0

我有一個帶有WIFI屏蔽的arduino板。我正在家中組裝和測試我的設備,並將它們部署在測試現場。Makefile定製變量

這些是我現在使用的參數集:

Home: 
String WIFI_SSID = "myssid"; 
String WIFI_PASSWORD = "123"; 
bool USE_IP = true; 
int PORT = 8080; 
String IP = "192.168.1.140"; 
String DOMAIN = null; 

Test-site: 
String WIFI_SSID = "Test-siteSSID"; 
String WIFI_PASSWORD = "456"; 
bool USE_IP = false; 
int PORT = 80; 
String IP = null; 
String DOMAIN = "www.google.com"; 

我覺得很煩人,我只要我的開關位置(這屢有發生在Arduino的IDE手動更改這些變量)。所以我看了一下https://github.com/sudar/Arduino-Makefile,這可以讓我使用命令行來編譯和編譯arduino代碼。

這就是我打算做:

  1. 在自定義的參數進行,即make HOMEmake DEPLOY
  2. 圖如何創建內部
  3. 通有自己的一組變量2個文件在編譯時包含正確的頭文件
  4. 編譯,這是由make文件自己照顧的。

我的問題是:

  1. 我怎麼能傳遞一個額外的參數,在步驟2中HOMEDEPLOY
  2. 根據提供的參數,Arduino編譯器如何確定在步驟3中包含哪個頭文件?
+0

@MikeW我正在問具體如何傳遞額外的參數HOME和DEPLOY,並在運行時決定包含哪些代碼。這怎麼不夠具體? – disappearedng

回答

0

這正好在你的Makefile:

TARGET?=DEPLOY 

all: build ... 

build: 
\tgcc ... -D$(TARGET) ... 

.PHONY: all build ... 

這正好在你的源代碼:

#ifdef DEPLOY 
#include "defs_deploy.h" 
#else 
#ifdef HOME 
#include "defs_home.h" 
#else 
#error Neither DEPLOY nor HOME is defined 
#endif /* HOME */ 
#endif /* DEPLOY */ 

其中一個去你的命令行:

make TARGET=DEPLOY 
make TARGET=HOME 

不漂亮,但它會工作。