Premake5构建失败:Tests项目无法找到Core静态库头文件
问题成因及解决方法
问题根源
编译Tests时找不到Core的头文件,核心原因是Premake不会自动将依赖项目的includedirs传递给依赖它的项目。你的Core项目虽然设置了includedirs { "src/core", "src/core/**" },但这些路径仅对Core自身编译有效,Tests项目无法自动继承这些包含路径。links { "Core" }只负责链接静态库文件,不处理头文件的查找路径。
解决方法
需要在Tests项目的includedirs中显式添加Core的头文件目录,以下是两种常用实现方式:
方式一:直接添加路径
修改Tests项目的includedirs配置,加入Core的根目录:
project "Tests" kind "ConsoleApp" language "C++" files { "tests/unit/**.cpp", "tests/MainTest.cpp", "tests/vendor/gtest/**.h", "tests/vendor/gtest/src/*.cc" } includedirs { "tests/vendor/gtest/", "tests/vendor/gtest/include/", "src/core" -- 添加Core头文件根目录 } links { "Core" } -- 其余配置保持不变
方式二:使用变量避免路径重复
如果后续Core的路径可能变更,建议用变量统一管理,减少重复修改:
workspace "Chess" configurations { "Debug", "Release" } cppdialect "C++17" location ".premake/generated/" bindirs ".premake/build/%{cfg.buildcfg}/bin/%{prj.name}" objdir ".premake/build/%{cfg.buildcfg}/obj/%{prj.name}" -- 定义Core的包含路径变量 local coreIncludeDir = "src/core" project "Core" kind "StaticLib" language "C++" files { coreIncludeDir .. "/**.hpp", coreIncludeDir .. "/**.cpp" } includedirs { coreIncludeDir, coreIncludeDir .. "/**" } -- 其余配置保持不变 project "Tests" kind "ConsoleApp" language "C++" files { "tests/unit/**.cpp", "tests/MainTest.cpp", "tests/vendor/gtest/**.h", "tests/vendor/gtest/src/*.cc" } includedirs { "tests/vendor/gtest/", "tests/vendor/gtest/include/", coreIncludeDir -- 使用统一变量 } links { "Core" } -- 其余配置保持不变
验证
修改后重新生成构建文件(比如执行premake5 gmake2或premake5 cmake),再编译Tests项目,即可正常找到Piece.hpp头文件。
内容的提问来源于stack exchange,提问作者RenP
相关产品推荐
相关产品推荐

