提问人:Batres 提问时间:10/26/2023 更新时间:10/31/2023 访问量:51
未跨 premake 携带的预处理器定义包括
Preprocessor definitions not carried across premake includes
问:
我有 3 个项目处于预制阶段: 项目 A(静态库):
project "A"
kind "StaticLib"
language "C++"
staticruntime "on"
files
{
"src/**.h",
"src/**.cpp",
"include/**.h"
}
includedirs
{
"include"
}
defines
{
"STATIC_DEFINE"
}
在 dll.h 文件中,在项目 A 中,我有:
#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"
这不是我的预制文件中的实际代码,它们有点臃肿,我判断伪代码足以解释问题并修复它,如有必要,我可以编辑问题并添加完整的预制文件和项目结构。
我所期望的是已经定义,因为它包括定义宏的 which include,但输出如下: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"
}
到 ,然后它出现在输出中,但只有当我将定义添加到所有 3 个预制文件时才起作用Project B
Project B
Project C
在不将定义添加到预制文件的情况下,任何帮助将不胜感激,谢谢。
答:
0赞
Jarod42
10/27/2023
#1
你
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()
评论
0赞
Batres
10/31/2023
谢谢你,这正是我想知道的,反正它没有继承 bu 谢谢,这有点奇怪
0赞
Jarod42
10/31/2023
拥有 / 定义 than should be inherit 也很常见。因此,无论如何,它都需要一种特殊的语法来选择继承或不继承的内容。DLL_IMPORT
DLL_EXPORT
评论
STATIC_DEFINE
Project A
files