我有 3 个项目正在预制中: 项目A(静态库):
project "A"
kind "StaticLib"
language "C++"
staticruntime "on"
files
{
"src/**.h",
"src/**.cpp",
"include/**.h"
}
includedirs
{
"include"
}
defines
{
"STATIC_DEFINE"
}
在项目 A 的 dll.h 文件中,我有:
#ifdef STATIC_DEFINE
#pragma message("Static Define")
#else
#pragma message("No Static Define")
#endif
另外两个项目是:
project "B"
kind "StaticLib"
language "C++"
staticruntime "on"
files
{
some project files, one of them includes dll.h
}
links
{
"A"
}
Project "C"
kind "ConsoleApp"
language "C++"
staticruntime "on"
files
{
again, project files, one includes dll.h
}
links
{
"B"
}
有一个包含所有内容的最终预制文件
workspace "Workspace"
architecture "x86_64"
startproject "C"
include "libs/A"
include "libs/B"
include "C"
这不是我的预制文件中的实际代码,它们有点臃肿,我认为伪代码足以解释问题并修复它,如果有必要,我可以编辑问题并添加完整的预制文件和项目结构。
我期望的是
C
定义了STATIC_DEFINE
,因为它包括B
,其中包括定义宏的A
,但输出如下:
Build started(A):
Static Define
Build started(B):
No Static Define
Build started(C)
No Static Define
同样,这不是完整的输出,因为它是一个完整的应用程序,有相当多的文件,并且其中大部分与问题无关,但如果需要,我可以提供它
我尝试添加
defines
{
"STATIC_DEFINE"
}
到
Project B
,然后它出现在 Project B
的输出中,但不出现在 Project C
的输出中
只有当我将定义添加到所有 3 个预制文件中时,它才起作用
任何无需将定义添加到预制文件中即可完成此操作的帮助将不胜感激,谢谢。
你的
defines { "STATIC_DEFINE" }
处于
project "A"
范围,因此仅适用于 project "A"
。
(还没有?)从某些属性“继承”的用法(
includedir
、links
、defines
)。
你可以为此创建 Lua 函数:
function UseA()
defines { "STATIC_DEFINE" }
includedirs { "include" }
links {"A"}
end
然后
project "B"
kind "StaticLib"
language "C++"
staticruntime "on"
files
{
-- some project files
}
useA()