【发布时间】:2015-07-13 21:12:01
【问题描述】:
我正在尝试在我的项目中包含 SFML 源。我的目录布局如下:
main
SFML (subtree synced with the official git repo)
src
<various modules>
General (here lies the binary)
从主层我先添加 SFML 子目录,然后再添加 src。正如我在查看构建日志时看到的,这会生成库:
sfml‑system
sfml‑window
sfml‑network
sfml‑graphics
sfml‑audio
sfml‑main
现在我想将它们链接到 General 目录中的二进制文件,如下所示:
add_executable(main ${main_SRCS})
target_link_libraries (main
sfml‑system
sfml‑window
sfml‑network
sfml‑graphics
sfml‑audio
sfml‑main
# Other stuff here
)
但我明白了:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml‑system
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml‑window
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml‑network
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml‑graphics
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml‑audio
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml‑main
为什么 CMake 尝试使用系统库而不是它刚刚构建的那些,我该如何解决这个问题?
【问题讨论】:
-
这些库是同一个 CMake 项目的目标吗?如果是这样,
sfml‑system等是目标的实际名称吗? -
顶级 CMakeLists 会:
add_subdirectory(SFML) add_subdirectory(src)我可以在构建日志中看到库名称:Linking CXX shared library ../../../lib/libsfml-graphics.so等。 -
@BaummitAugen 我刚刚意识到 SFML 子目录定义了它自己的项目。我想这回答了你的问题并以某种方式改变了我的事情?
-
如果
sfml-system不是当前 CMake 文件中的已知目标,您显然不能说 “链接到该目标!”。不过,您可以添加其他链接目录(即在其中搜索库的目录),请参见例如cmake.org/pipermail/cmake/2011-May/044295.html -
@BaummitAugen 我不知道为什么你的链接说不使用
link_directories,但这个问题的一个简单答案是“使用link_directories(<location where library have been built>”。 OP 应该将路径表示为${CMAKE_BUILD_DIR}/buildSubDirectory