2015-05-04 76 views
1

我想在我的项目中包含SFML源代码。我的目录是这样布局的:来自子目录的CMake链接库

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 

现在,我想他们在总目录这样的链接到我的二进制:

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尝试使用系统库而不是刚刚构建的系统库,以及如何解决这个问题?

+0

那些库是同一个CMake项目的目标吗?如果是这样,是'sfml-system'等目标的实际名称? –

+0

顶级CMakeLists作用: 'add_subdirectory(SFML) add_subdirectory(SRC)' 我可以看到生成日志库名称: 'CXX链接共享库../../../lib/ libsfml-graphics.so等 – Tommalla

+0

@BaummitAugen我刚刚意识到SFML子目录定义了自己的项目。我想这会回答你的问题,并以某种方式改变我的东西? – Tommalla

回答

1

这应该是正常的。

试图与CMake的3.2在Windows上的Visual Studio发电机和发电机的Makefile在Linux上执行以下操作:

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正确和正确地sfml-systemfoo链接建立。

您从另一个子目录生成可执行文件的事实不应该在这里产生影响。

的事项还真是,add_subdirectory调用发生之前target_link_libraries,使CMake的已经知道sfml-system目标的唯一的事。

+0

您的回答是正确的,但由于某些原因在m y项目(然而,在虚拟项目中工作)。出于这个原因,我选择它作为接受的答案。 – Tommalla