IAR Embedded Workbench 常用宏變量(Argument Variables)備忘錄

在 IAR 開發過程中,配置 Pre/Post-build command(預/後構建命令行)或 External Tools(外部工具)時,經常需要使用動態路徑。IAR 提供了一套類似環境變量的 Argument Variables,熟練使用它們可以讓工程配置更靈活,不受絕對路徑限制。

1. 核心路徑類 (Project & Workspace)

這是最常用的變量,用於定位工程和工作空間的位置。

變量名

説明

示例 (假設工程在 C:\Project)

$PROJ_DIR$

項目目錄 (.ewp 文件所在目錄)

C:\Project

$PROJ_FNAME$

項目名稱 (不帶擴展名)

MyProject

$PROJ_PATH$

項目文件全路徑

C:\Project\MyProject.ewp

$WS_DIR$

工作空間目錄 (.eww 文件所在目錄)

C:\Project (通常同項目目錄)

$WS_FNAME$

工作空間名稱 (不帶擴展名)

MyWorkspace

2. 構建配置與輸出類 (Configuration & Output)

用於區分 Debug/Release 版本以及定位編譯生成的二進制文件。

變量名

説明

示例

$CONFIG_NAME$

當前配置名稱 (Debug / Release)

Debug

$TARGET_DIR$

輸出目標目錄 (生成 .out/.hex 的文件夾)

C:\Project\Debug\Exe

$TARGET_BNAME$

輸出文件名 (帶擴展名)

MyProject.out

$TARGET_BPATH$

輸出文件全路徑

C:\Project\Debug\Exe\MyProject.out

$OBJ_DIR$

中間對象目錄 (生成 .o 文件的文件夾)

C:\Project\Debug\Obj

$LIST_DIR$

列表文件目錄 (生成 .map/.lst 的文件夾)

C:\Project\Debug\List

3. 環境變量與工具類 (Environment & Tools)

用於引用 IAR 安裝目錄或編譯器路徑。

變量名

説明

示例

$EW_DIR$

IAR 安裝根目錄

C:\Program Files\IAR Systems\Embedded Workbench 9.0

$TOOLKIT_DIR$

特定架構工具鏈目錄

C:\...\Embedded Workbench 9.0\arm

$DATE$

當前系統日期

Oct 25 2023

$TIME$

當前系統時間

09:30:00

4. 當前處理文件類 (Current File)

注意:這類變量通常只在“自定義構建規則”或對單個文件執行操作時有效。

變量名

説明

$FILE_DIR$

當前正在處理文件的目錄

$FILE_FNAME$

當前文件名 (不帶擴展名)

$FILE_PATH$

當前文件的絕對路徑


💡 實戰使用技巧

1. 永遠記得加引號!

Windows 路徑中經常包含空格(例如 Program FilesMy Documents)。如果不加引號,命令行會把空格視為參數分隔符,導致報錯。

  • ❌ 錯誤:$PROJ_DIR$\output.bin
  • ✅ 正確:"$PROJ_DIR$\output.bin"

2. 經典應用:Post-build 自動複製文件

Options -> Build Actions -> Post-build command line 中:

將生成的固件重命名並複製到項目根目錄下的 Firmware 文件夾:

cmd /c copy "$TARGET_BPATH$" "$PROJ_DIR$\Firmware\App_$CONFIG_NAME$.hex"

效果: 編譯 Release 版時,自動生成 App_Release.hex

3. 經典應用:將配置傳遞給 C 代碼

想在代碼裏知道當前是 Debug 還是 Release?
Options -> C/C++ Compiler -> Preprocessor -> Defined symbols 中添加:

BUILD_CONFIG="$CONFIG_NAME$"

在 C 代碼中:

#include <stdio.h>
#define XSTR(x) STR(x)
#define STR(x) #x

void main() {
    printf("Build Config: %s\n", XSTR(BUILD_CONFIG));
}

4. 經典應用:調用 Python 腳本處理 Bin 文件

python "$PROJ_DIR$\script\checksum.py" "$TARGET_BPATH$"