首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake SDL和add_subdirectory

CMake SDL和add_subdirectory
EN

Stack Overflow用户
提问于 2015-05-21 00:46:51
回答 2查看 999关注 0票数 0

我正在尝试将SDL库添加到我的第三方列表中。为此,我创建了包含以下内容的CMakeLists.txt文件:

代码语言:javascript
复制
CMAKE_MINIMUM_REQUIRED(VERSION 3.1.3)
project(TestProject)

ADD_EXECUTABLE(test_project index.cpp)

INCLUDE_DIRECTORIES (3dparty/sdl/include)

ADD_SUBDIRECTORY(3dparty/sdl EXCLUDE_FROM_ALL)

TARGET_LINK_LIBRARIES(test_project general SDL2)
TARGET_LINK_LIBRARIES(test_project general SDL2main)
TARGET_LINK_LIBRARIES(test_project debug SDL2)
TARGET_LINK_LIBRARIES(test_project debug SDL2main)

当我生成VS13项目时,其目标()的SLD链接出现在目标"test_project“中。test_project目标中的链接库列表:

代码语言:javascript
复制
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
3dparty\sdl\Debug\SDL2main.lib
3dparty\sdl\Debug\SDL2.lib
winmm.lib
imm32.lib
version.lib
dinput8.lib
dxguid.lib
dxerr.lib

但应该是这样的:

代码语言:javascript
复制
3dparty\sdl\Debug\SDL2main.lib
3dparty\sdl\Debug\SDL2.lib

在目标"test_project“中,我没有包含DirectX SDK库的路径。因此,链接器告诉我:

代码语言:javascript
复制
 LINK : fatal error LNK1104: cannot open file 'dxerr.lib'
EN

回答 2

Stack Overflow用户

发布于 2015-05-21 16:26:57

这是一个特性。CMake transitively passes on public link dependencies.

也就是说,如果SDL具有到dxerr.lib的公共链接依赖项,那么将具有任何链接到SDL的可执行文件。

我现在看到了两种可能性:要么SDL在他们的构建脚本中有一个bug,要么错误地将一个库声明为公共依赖,而它应该是私有的。或者确实存在需要由可执行文件解决的合法依赖项。

例如,后者适用于将SDL构建为静态库而不是DLL的情况。请记住,静态库不会通过链接器传递,这意味着静态库的所有依赖项都会传递给链接它们的可执行文件或DLL。

票数 2
EN

Stack Overflow用户

发布于 2015-05-22 04:21:02

在ComicSansMS的改进之后,我在SDL源文件的CMakeLists.txt文件中将"LINK_PRIVATE“放入target_link_libraries中,现在它可以工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30355763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档