我希望使用premake
来创建预编译的标头,作为本身的 练习。
这个想法是将这些预编译的头文件保留在远离头文件源文件的单独目录中(然后可以从系统中将其删除)。 然后,稍后在构建包含这些头的程序时,应将预编译的头(而不是头源文件)包含在.cpp源程序中。
但是,以下premake
lua
脚本不达到了上述目标。它利用包含头文件(MathLib.h)的伪源(.cpp)程序来驱动premake
进程:
-- Filename : premake-pch-create.lua
-- Dir : Files > C > SW > Applications > Samples >
-- premakeSamples > premake-pch-create
--#!lua
-- A solution contains projects,
-- and defines the available configurations
solution "pch"
configurations { "Debug", "Release" }
-- A project defines one build target
project "pch"
kind "ConsoleApp"
language "C++"
files {"MathLib.h", "**.cpp"}
includedirs {"../../HeaderFiles/src/"}
pchheader "MathLib.h"
configuration "Debug"
defines { "DEBUG" }
flags { "Symbols" }
configuration "Release"
defines { "NDEBUG" }
flags { "Optimize" }
-- Register the "runmakefile" action.
newaction
{
trigger = "runmakefile",
description = "run the generated makefile to create the executable using the default ('debug' config)",
execute = function()
os.execute("make")
end
}
我已经“成功”测试了这个premake
文件,并获得了以下结果:
1)生成文件正确。
2)运行makefile(通过premake
'runmakefile'操作)具有以下结果:
a)它预编译MathLib.h标头,并在从属于包含premake lua脚本的目录的obj目录中创建MathLib.h.gch预编译的标头文件。
b)编译.cpp虚拟驱动程序,将其链接并创建一个.exe文件。
c)它不运行.exe文件。
这一切都很好,但是并不能满足我最初的目标(重复):
1)提前预编译头,然后在单独的gch目录中创建* .h.gch文件。
2)我不需要虚拟源驱动程序(cpp)来驱动预制作过程。可以避免吗?
现在,为了实现这些目标,我正在使用一个虚拟的.cpp文件进行premake
运行,该文件仅包含标题和显示的premake lua脚本。这将创建预编译的头,但不在所需的目录中。有没有办法直接在指定的目录中创建这些* h.gch文件?