From 8cf58ebf708679c32f08e1046c3fde4bcbfe9990 Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Tue, 27 Jan 2026 18:38:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(build):=20=E6=94=AF=E6=8C=81=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=B8=AD=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=BA=90=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 sources 字段支持在 project.yml 中指定源文件 - 实现相对路径转换为绝对路径的功能 - 支持单个文件和目录的混合配置 - 优化文件列表生成逻辑 - 修复源文件路径解析问题 - 更新项目构建流程以使用新配置格式 --- examples/prime/{ => cpp-src}/vector.cc | 0 examples/prime/{ => php-src}/vector.stub.php | 0 examples/prime/project.yml | 5 ++++- src/Php/Translator.php | 21 ++++++++++++++------ 4 files changed, 19 insertions(+), 7 deletions(-) rename examples/prime/{ => cpp-src}/vector.cc (100%) rename examples/prime/{ => php-src}/vector.stub.php (100%) diff --git a/examples/prime/vector.cc b/examples/prime/cpp-src/vector.cc similarity index 100% rename from examples/prime/vector.cc rename to examples/prime/cpp-src/vector.cc diff --git a/examples/prime/vector.stub.php b/examples/prime/php-src/vector.stub.php similarity index 100% rename from examples/prime/vector.stub.php rename to examples/prime/php-src/vector.stub.php diff --git a/examples/prime/project.yml b/examples/prime/project.yml index 0a4a3d11..a5c1099f 100644 --- a/examples/prime/project.yml +++ b/examples/prime/project.yml @@ -7,4 +7,7 @@ cxxflags: | ldflags: | -L/usr/lib/x86_64-linux-gnu/ -lssl - +sources: + - php-src + - ./cpp-src + - main.php \ No newline at end of file diff --git a/src/Php/Translator.php b/src/Php/Translator.php index 7957865a..5aae2c7e 100644 --- a/src/Php/Translator.php +++ b/src/Php/Translator.php @@ -168,17 +168,26 @@ class Translator extends Preprocessor protected function parseProjectYaml(string $path): array { $cfg = Yaml::parseFile($path); + $projectDir = dirname($path); if (!empty($cfg['sources'])) { - $dirs = $cfg['sources']; + $sources = $cfg['sources']; $list = []; - foreach ($dirs as $dir) { - $tmp = $this->getFilesFromDir($dir); - $list = array_merge($list, $tmp); + foreach ($sources as $src) { + $src = trim($src); + if ($src[0] != '/') { + $src = $projectDir . '/' . $src; + } + $src = realpath($src); + if (is_file($src)) { + $list[] = $src; + } else { + $tmp = $this->getFilesFromDir($src); + $list = array_merge($list, $tmp); + } } } else { - $dir = dirname($path); - $list = $this->getFilesFromDir($dir); + $list = $this->getFilesFromDir($projectDir); } if (!empty($cfg['cxxflags'])) { $this->cxxflags = str_replace("\n", " ", $cfg['cxxflags']);