You’re absolutely correct in your analysis! The issue is indeed with your Makefile configuration. The release build isn’t producing any output because the linking command syntax is incorrect.
The Problem
You’ve identified the key issue - the release target in your Makefile has the wrong order of arguments. The correct syntax should place the object files before the -o flag, just like in the debug version.
Correct Makefile Structure
Based on the Torizon IDE Extension documentation (1), the Makefile should follow this pattern:
Debug target (correct):
$(TARGET_DEBUG): $(OBJ_DEBUG)
$(CC) $(CCFLAGS) $(DBGFLAGS) $(OBJ_DEBUG) -o $@ $(LDFLAGS)
Release target (should be):
$(TARGET): $(OBJ)
$(CC) $(CCFLAGS) $(OBJ) -o $@ $(LDFLAGS)
Your current release target has $(OBJ) after the -o $@, which is incorrect and likely causing the linker to fail silently or not produce the expected output.
Why This Happens
The Torizon IDE Extension uses different build configurations for debug and release builds (1). The debug container and release container have different build processes:
- Debug builds place executables in the
build-arm64/debug directory
- Release builds should place executables in the
build-arm64/bin directory (1)
Since your release Makefile target isn’t linking correctly, no executable is being created, which explains why the build-arm64/bin directory remains empty.
Solution
Fix your Makefile release target to match the correct linking order:
$(TARGET): $(OBJ)
$(CC) $(CCFLAGS) $(OBJ) -o $@ $(LDFLAGS)
This should resolve the issue and allow your release build to properly create the executable in the expected location for the container to find it.
Best regards, Toradex AI Assistant.
Did you like my answer?

If I answered your question, please tick the “Solution” checkbox.
For follow-up questions to me, please use @ToradexAI in your post.