3

(これは、Web サイトでダウンロードできる Premake5 アルファ バイナリを使用しています)

既存の VS ソリューションを premake5 を使用するように移植しようとしています。

MS スタイルのプリコンパイル済みヘッダー (stdafx.h/stdafx.cpp) を使用します。

これをテスト プロジェクトとして指定すると、次のようになります。

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

プリコンパイル済みヘッダーを使用するようにプロジェクトを設定しますが、プリコンパイル済みヘッダー (/Yc) を生成するように stdafx.cpp を設定していません。代わりに、プロジェクト内のすべてのファイルが使用しようとしており (/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" }	

関連する質問の 1 つ: プロジェクト内の特定のファイルでプリコンパイル済みヘッダーの使用を無効にするにはどうすればよいですか? PCH が含まれていると一部のファイルがビルドされないため、既存のソリューション/プロジェクトでそれらを手動で無効にしました。

ありがとう!

4

2 に答える 2

1

おそらくpchsource、ファイル パス ( などfiles)が必要なためですstdafx.cpp。スクリプトと同じディレクトリにないため、Premake はそれを見つけられません。pchsource "../src_test/cloud/stdafxcpp"代わりに使用してみてください。問題が解決するはずです。

また、インクルード ディレクトリとして追加していないことがわかります。"../src_test/cloud/"つまり、相対パスを使用して pch ヘッダーがインクルードされるということですよね? pchheaderその場合は、それを反映するように更新する必要があります。pchheaderVisual Studio の動作方法により、cpp ファイルに表示されるように設定する必要があります。たとえば、cpp ファイル#include "../src_test/cloud/stdafx.h"に Premake: でこれを使用する必要がある場合pchheader "../src_test/cloud/stdafx.h"

最後に、特定のファイルのプリコンパイル済みヘッダーを非アクティブ化するには、フィルターを使用できます。

-- deactivate precompiled headers for C files
filter "files:**.c"
    flags { "NoPCH" }
于 2015-07-17T08:37:46.320 に答える