I have 3 projects in premake: Project A (static library):
project "A"
kind "StaticLib"
language "C++"
staticruntime "on"
files
{
"src/**.h",
"src/**.cpp",
"include/**.h"
}
includedirs
{
"include"
}
defines
{
"STATIC_DEFINE"
}
In the dll.h file, inside Project A I have:
#ifdef STATIC_DEFINE
#pragma message("Static Define")
#else
#pragma message("No Static Define")
#endif
The other two projects are:
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"
}
there is one final premake file which includes them all
workspace "Workspace"
architecture "x86_64"
startproject "C"
include "libs/A"
include "libs/B"
include "C"
This is not the actual code in my premake files, they are kind of bloated and I judged pseudocode would be enough to explain the problem and fix it, if necessary I can edit the question and add the full premake files and project structure.
What I would expect is for C
to have STATIC_DEFINE
defined, since it includes B
which includes A
which defines the macro, but the output is as follows:
Build started(A):
Static Define
Build started(B):
No Static Define
Build started(C)
No Static Define
Again, this is not the full output since it is a full application which has quite a few files, and most of it is not relevant to the question, but I can provide it if needed
I tried adding the
defines
{
"STATIC_DEFINE"
}
to Project B
, and then it appeared in the output for that Project B
but not for Project C
only when I add the definition to all 3 premake files does it work
Any help to do this without adding the definitions to the premake files would be appreciated, thank you.
Your
is at
project "A"
scope and so only applies toproject "A"
.There are not (yet?) usage to "inherit" from some properties (
includedir
,links
,defines
).You might create Lua function for that:
and then