我使用 Premake5 作为 C++ 项目的构建系统,该项目当前由静态库(核心)和控制台应用程序(测试)组成。但是,当我尝试编译包含来自 Core 的文件的测试时,编译器会产生以下错误:
/mnt/HD/Linux/Jetbrains/CLion/bin/cmake/linux/x64/bin/cmake --build /home/renerp/Documentos/Projetos/C++/Chess/.premake/generated/cmake-build-debug --target Tests -j 3
[1/15] Building CXX object CMakeFiles/Tests.dir/home/renerp/Documentos/Projetos/C++/Chess/tests/unit/core/pieces/PawnTest.cpp.o
FAILED: CMakeFiles/Tests.dir/home/renerp/Documentos/Projetos/C++/Chess/tests/unit/core/pieces/PawnTest.cpp.o
/usr/bin/g++ -DDEBUG -I/home/renerp/Documentos/Projetos/C++/Chess/tests/vendor/gtest -I/home/renerp/Documentos/Projetos/C++/Chess/tests/vendor/gtest/include -std=c++17 -fdiagnostics-color=always -g -std=c++17 -MD -MT CMakeFiles/Tests.dir/home/renerp/Documentos/Projetos/C++/Chess/tests/unit/core/pieces/PawnTest.cpp.o -MF CMakeFiles/Tests.dir/home/renerp/Documentos/Projetos/C++/Chess/tests/unit/core/pieces/PawnTest.cpp.o.d -o CMakeFiles/Tests.dir/home/renerp/Documentos/Projetos/C++/Chess/tests/unit/core/pieces/PawnTest.cpp.o -c /home/renerp/Documentos/Projetos/C++/Chess/tests/unit/core/pieces/PawnTest.cpp
/home/renerp/Documentos/Projetos/C++/Chess/tests/unit/core/pieces/PawnTest.cpp:5:10: fatal error: Piece.hpp: Arquivo ou diretório inexistente
5 | #include <Piece.hpp>
| ^~~~~~~~~~~
compilation terminated.
[3/15] Building CXX object CMakeFiles/Tests.dir/home/renerp/Documentos/Projetos/C++/Chess/tests/unit/core/utils/coordinates/Coordinates.cpp.o
ninja: build stopped: subcommand failed.
我正在使用 Jarod cmake 模块,这就是错误涉及 CMake 的原因。
使用默认的 gmak2 会出现以下错误:
==== Building Core (debug) ====
Creating ../build/Debug/obj/Core
...
==== Building Tests (debug) ====
Creating ../build/Debug/obj/Tests
Coordinates.cpp
MainTest.cpp
PawnTest.cpp
../../tests/unit/core/pieces/PawnTest.cpp:5:10: fatal error: Piece.hpp: Arquivo ou diretório inexistente
5 | #include <Piece.hpp>
| ^~~~~~~~~~~
compilation terminated.
make[1]: *** [Tests.make:167: ../build/Debug/obj/Tests/PawnTest.o] Erro 1
make: *** [Makefile:38: Tests] Erro 2
当前预制文件内容如下:
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}"
project "Core"
kind "StaticLib"
language "C++"
files { "src/core/**.hpp", "src/core/**.cpp" }
includedirs { "src/core", "src/core/**" }
filter "configurations:Debug"
defines { "DEBUG" }
symbols "On"
filter "configurations:Release"
defines { "NDEBUG" }
optimize "On"
filter ""
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/"
}
links { "Core" }
filter "configurations:Debug"
defines { "DEBUG" }
symbols "On"
我希望此配置能够正确设置包含路径并将核心库与测试应用程序链接起来。可能是什么原因导致此问题?如何解决?
您忘记在“测试”中添加正确的
includedirs
(links
确实传播includedirs
):
project "Tests"
-- ...
includedirs {
"tests/vendor/gtest/",
"tests/vendor/gtest/include/",
"src/core", "src/core/**"
}