From eedaa8c079ee0eb4cf9175db5c51f11c2748dcfd Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 1 Apr 2026 23:29:57 +0800 Subject: improve utils.replace --- tests/apis/add_files_replace/src/config.h | 2 ++ tests/apis/add_files_replace/src/main.c | 7 +++---- xmake/rules/utils/replace/xmake.lua | 5 +++++ 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 tests/apis/add_files_replace/src/config.h diff --git a/tests/apis/add_files_replace/src/config.h b/tests/apis/add_files_replace/src/config.h new file mode 100644 index 000000000..96d83f651 --- /dev/null +++ b/tests/apis/add_files_replace/src/config.h @@ -0,0 +1,2 @@ +#pragma once +#define VERSION "1.0" diff --git a/tests/apis/add_files_replace/src/main.c b/tests/apis/add_files_replace/src/main.c index 8b6ee15b8..d2ac8f8ae 100644 --- a/tests/apis/add_files_replace/src/main.c +++ b/tests/apis/add_files_replace/src/main.c @@ -1,10 +1,9 @@ #include +#include "config.h" -#ifndef REPLACED_VALUE -#define REPLACED_VALUE "original" -#endif +#define HELLO "original" int main(int argc, char** argv) { - printf("hello %s!\n", REPLACED_VALUE); + printf("hello %s, %s!\n", HELLO, VERSION); return 0; } diff --git a/xmake/rules/utils/replace/xmake.lua b/xmake/rules/utils/replace/xmake.lua index 47340cb1a..da04a0720 100644 --- a/xmake/rules/utils/replace/xmake.lua +++ b/xmake/rules/utils/replace/xmake.lua @@ -45,6 +45,11 @@ rule("utils.replace") -- get the replaced file path local replacefile = target:autogenfile(sourcefile) + -- add the original source directory as includedir for the replaced file, + -- so that relative #include paths still work + local sourcedir = path.directory(path.absolute(sourcefile)) + target:fileconfig_add(replacefile, {includedirs = sourcedir}) + -- replace the sourcefile in the build sourcebatch, -- so that the compiler uses the replaced file instead of the original for _, sourcebatch in pairs(target:sourcebatches()) do -- cgit v1.3.1