子目录中的 CMake link 库
CMake link library from subdirectory
我正在尝试在我的项目中包含 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
现在我想 link 将它们添加到我的二进制目录中,如下所示:
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 3.2 的 Windows 上使用 Visual Studio 生成器和 Linux 上的 Makefile 生成器尝试了以下操作:
project(test)
cmake_minimum_required(VERSION 2.8)
add_subdirectory(SFML-2.2)
add_executable(foo bar.cpp)
target_link_libraries(foo sfml-system)
SFML 构建正确并且 foo
正确链接到 sfml-system
。
您从另一个子目录构建可执行文件这一事实不应影响此处。
唯一真正重要的是 add_subdirectory
调用发生在 之前 target_link_libraries
,因此 CMake 已经知道 sfml-system
目标。
我正在尝试在我的项目中包含 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
现在我想 link 将它们添加到我的二进制目录中,如下所示:
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 3.2 的 Windows 上使用 Visual Studio 生成器和 Linux 上的 Makefile 生成器尝试了以下操作:
project(test)
cmake_minimum_required(VERSION 2.8)
add_subdirectory(SFML-2.2)
add_executable(foo bar.cpp)
target_link_libraries(foo sfml-system)
SFML 构建正确并且 foo
正确链接到 sfml-system
。
您从另一个子目录构建可执行文件这一事实不应影响此处。
唯一真正重要的是 add_subdirectory
调用发生在 之前 target_link_libraries
,因此 CMake 已经知道 sfml-system
目标。