gpt4 book ai didi

premake5 预编译 header 不起作用

转载 作者:行者123 更新时间:2023-12-05 06:43:57 32 4
gpt4 key购买 nike

(这是使用可在网站上下载的 Premake5 alpha 二进制文件)

我正在尝试将我现有的 VS 解决方案移植到使用 premake5。

它使用 MS 风格的预编译头文件 (stdafx.h/stdafx.cpp)。

当我指定这是我的测试项目时:

pchheader "stdafx.h"
pchsource "stdafx.cpp"

它确实将项目设置为使用预编译头文件,但未将 stdafx.cpp 设置为生成预编译头文件 (/Yc)。相反,项目中的所有文件都试图使用 (/Yu) 并且没有人生成 PCH。所以它不会构建..

我猜这确实有效,我在这里缺少什么黑魔法?

这是我的整个 premake5 文件以供引用

-- premake5.lua
solution "Cloud"
configurations { "Debug", "Release", "Final" }
platforms { "Win32_AVX2", "Win64_AVX2"}
location "premake"

flags{"MultiProcessorCompile", "ExtraWarnings", "FatalCompileWarnings", "FatalLinkWarnings", "FloatFast"}

startproject "Cloud"
vectorextensions "AVX2"

filter { "platforms:Win32" }
system "Windows"
architecture "x32"
filter { "platforms:Win64" }
system "Windows"
architecture "x64"

filter "configurations:Debug"
defines { "DEBUG" }
flags { "Symbols" }
filter "configurations:Release"
defines { "NDEBUG" }
flags{"Symbols"}
optimize "Speed"
filter "configurations:Final"
defines { "NDEBUG" }
flags{"LinkTimeOptimization"}
optimize "Speed"

group "app"

--primary executable
project "Cloud"
location "../src_test/cloud"
kind "ConsoleApp"
language "C++"
targetdir "..//%{cfg.buildcfg}"
pchheader "stdafx.h"
pchsource "stdafx.cpp"
vpaths{
{["src/pch/*"] = "../src_test/cloud/stdafx.*"},
{["src/*"] = "../src_test/cloud/**.cpp"},
{["module/*"] = "../src_test/cloud/Module*.h"},
{["core/*"] = "../src_test/cloud/Core*.h"},
{["headers*"] = "../src_test/cloud/*.h"},
--{["src_c/*"] = "../src_test/cloud/**.c"}
}
files { "../src_test/cloud/*.h", "../src_test/cloud/*.c", "../src_test/cloud/*.cpp", "../src_test/cloud/*.hpp" }

一个相关问题:如何禁用项目中特定文件的预编译 header 使用?如果包含 PCH,我的一些文件将无法构建,因此我已在现有解决方案/项目中手动禁用它们。

谢谢!

最佳答案

这可能是因为 pchsource 需要一个文件路径(比如 files) 因为你的 stdafx.cpp 和你的脚本不在同一个目录, Premake 没有找到它。尝试改用 pchsource "../src_test/cloud/stdafxcpp",它应该可以解决问题。

我还看到您没有将 "../src_test/cloud/" 添加为包含目录,这意味着您的 pch header 将使用相对路径包含在内,对吗?如果是这样,您需要更新 pchheader 以反射(reflect)这一点。由于 Visual Studio 的工作方式,您需要设置 pchheader,因为它出现在您的 cpp 文件中。例如。如果在你的 cpp 文件中你有 #include "../src_test/cloud/stdafx.h" 你需要在 Premake 中使用它:pchheader "../src_test/cloud/stdafx. h".

最后,要停用某些文件的预编译 header ,您可以使用过滤器:

-- deactivate precompiled headers for C files
filter "files:**.c"
flags { "NoPCH" }

关于premake5 预编译 header 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31466183/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com