最近我从 CMake 更改为 Premake (v5.0.0-alpha8),我不太确定如何在 Premake 中实现以下功能。
我想包含一些依赖项,因此在 CMake 中我可以执行以下操作:
target_link_libraries(${PROJECT_NAME}
${YALLA_ABS_PLATFORM}
${YALLA_LIBRARY})
上面将这些库(dir)的路径添加到编译器中的“附加包含目录”中,它还将在链接器中的“附加依赖项”中添加一个条目(lib),所以我不需要做任何特别的事情打电话target_link_libraries
。
所以我希望当我在 Premake 中做这样的事情时:
links {
YALLA_LIBRARY
}
我会得到相同的结果,但我没有。
我也尝试使用,libdirs
但它并没有真正起作用,我的意思是我看不到作为“附加包含目录”(/I)或 Yalla.Library.lib 传递给编译器的库目录及其子目录传递给链接器作为“附加依赖项”。
这是我使用的目录结构:
.
|-- src
| |-- launcher
| |-- library
| | `-- utils
| `-- platform
| |-- abstract
| `-- win32
`-- tests
`-- platform
`-- win32
库目录在Premake中定义如下:
project(YALLA_LIBRARY)
kind "SharedLib"
files {
"utils/string-converter.hpp",
"utils/string-converter.cpp",
"defines.hpp"
}
平台目录在Premake 中定义如下:
project(YALLA_PLATFORM)
kind "SharedLib"
includedirs "abstract"
links {
YALLA_LIBRARY
}
if os.get() == "windows" then
include "win32"
else
return -- OS NOT SUPPORTED
end
win32目录在Premake 中定义如下:
files {
"event-loop.cpp",
"win32-exception.cpp",
"win32-exception.hpp",
"win32-window.cpp",
"win32-window.hpp",
"window.cpp"
}
最后在根目录我有以下 Premake 文件:
PROJECT_NAME = "Yalla"
-- Sets global constants that represents the projects' names
YALLA_LAUNCHER = PROJECT_NAME .. ".Launcher"
YALLA_LIBRARY = PROJECT_NAME .. ".Library"
YALLA_ABS_PLATFORM = PROJECT_NAME .. ".AbstractPlatform"
YALLA_PLATFORM = PROJECT_NAME .. ".Platform"
workspace(PROJECT_NAME)
configurations { "Release", "Debug" }
flags { "Unicode" }
startproject ( YALLA_LAUNCHER )
location ( "../lua_build" )
include "src/launcher"
include "src/library"
include "src/platform"
由于缺乏经验,我可能误解了 Premake 的工作原理。