【问题标题】:Linking the TGUI library with cmake将 TGUI 库与 cmake 链接
【发布时间】:2015-02-15 13:34:14
【问题描述】:

很抱歉打扰您,但我在使用 Cmake 包含库时遇到了问题。我想在我的 sfml 项目中包含 tgui 库,但我不知道该怎么做。我有点发现如何包含 sfml 库,但我找不到如何包含 tgui 库,并且我尝试和搜索的所有内容都失败了。

在他们的网站上描述了如何使用它,但没有描述如何实现它。

这是我项目的 cmake 文件(直到 sfml 链接):

cmake_minimum_required(VERSION 2.8)    
project(AntWorld)    

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")    

set(SOURCE_FILES "main.cpp")    
add_executable(AntWorld ${SOURCE_FILES})    

# include_directories("${PROJECT_SOURCE_DIR}/*")    


# Define sources and executable    

set(EXECUTABLE_NAME "Run_AntWorld")    

add_executable(${EXECUTABLE_NAME} main.cpp)    



# Detect and add SFML    
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})    
find_package(SFML 2 REQUIRED system window graphics network audio)    
if(SFML_FOUND)    
    include_directories(${SFML_INCLUDE_DIR})    
    target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})    

endif()    

嗯,这就是目前为止的工作代码。

我试图调整它在

中的描述方式

www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file.

这是最有前途的帖子,但是,不知何故,我无法找到他们实际试图解释的内容,因为他们描述了根本不包含在其层次结构中的路径和/或文件(或者我只是不明白,但无论哪种方式都有错误)。

我尝试过的其他一切都失败了,和这个一样壮观。

啊,对于我试图链接的图书馆:

https://github.com/texus/TGUI

您也可以在他们的网站 (https://tgui.eu/) 上下载它,我在 0.6.7 版(未预编译的版本)上进行了尝试,因为我在 Linux 上使用 Clion。如果这是问题所在,我该怎么做才能让它发挥作用?

无论哪种方式,感谢您的每一个帮助,我希望我不会打扰您做一些重要的事情。

【问题讨论】:

    标签: c++ user-interface cmake sfml static-linking


    【解决方案1】:

    链接到 TGUI 的方式与链接到 SFML 的方式几乎相同。

    在您的 cmake_modules 文件夹中,您可能已经有一个 FindSFML.cmake 文件。您还必须将 FindTGUI.cmake 复制到那里(可以在 TGUI_Path/cmake/Modules 中找到)。

    为了找到 TGUI 库,您只需调用 find_package

    find_package(TGUI 0.6 REQUIRED).
    

    链接看起来像这样

    target_link_libraries(target ${TGUI_LIBRARY} ${SFML_LIBRARIES})
    

    完整示例:

    cmake_minimum_required(VERSION 2.8)
    project(TestProject)
    
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
    
    find_package(SFML 2 REQUIRED system window graphics network audio)    
    find_package(TGUI 0.6 REQUIRED)
    
    if(NOT SFML_FOUND)
        message(FATAL_ERROR "Could not find SFML")
    endif()
    
    if(NOT TGUI_FOUND)
        message(FATAL_ERROR "Could not find TGUI")
    endif()
    
    add_executable(TestProject main.cpp)
    target_link_libraries(TestProject ${TGUI_LIBRARY} ${SFML_LIBRARIES})
    

    【讨论】:

    • 好吧,谢谢,至少现在它只返回一个错误,您可能可以帮助我解决一个错误:“错误:找不到 TGUI”(来自 FindTGUI.cmake)。我将它包含在我的项目的文件夹中,我应该把它放在哪里才能找到?我看着它并自己尝试了一下,但它没有用......
    • @blueBurningCoder 在构建 tgui 时(在 the linux tutorial 之后,您应该在最后运行“sudo make install”,这将安装 tgui 以便可以自动找到它。如果你不想要到或无法安装 tgui(例如,没有 root 访问权限),那么您始终可以将 cmake 中的 TGUI_ROOT 变量设置为 tgui 目录(必须包括“lib”和“include”子文件夹)。但在这种情况下,您可能还需要"include_directories(TGUI_Path/include)" 在你的 cmake 脚本中。但是正确安装 TGUI 可以更容易地使用它。
    • 我不知道为什么我没有找到这个......无论哪种方式,当我尝试它时它都停止在 38% 并出现以下错误:/home/blueburningcoder/Downloads/TGUI/src /TGUI/EditBox.cpp:在成员函数'virtual void tgui::EditBox::mouseMoved(float, float)'中:/home/blueburningcoder/Downloads/TGUI/src/TGUI/EditBox.cpp:1172:69:错误: 'class sf::String' 没有名为 'substring' 的成员(还有更多类似的)。 . . make[2]: *** [src/TGUI/CMakeFiles/tgui.dir/EditBox.cpp.o] 错误 1 ​​make[2]: *** 等待未完成的工作.... make[1]: ** * [src/TGUI/CMakeFiles/tgui.dir/all] 错误 2 make: *** [all] 错误 2
    • 再试一次,它甚至更早地失败了,在 17% 时出现相同的错误消息:make[2]: *** [src/TGUI/CMakeFiles/tgui.dir/EditBox.cpp.o ] 错误 1 ​​make[2]: *** Waiting for unfinished jobs.... make[2]: *** [src/TGUI/CMakeFiles/tgui.dir/TextBox.cpp.o] 错误 1 ​​make[1] : *** [src/TGUI/CMakeFiles/tgui.dir/all] 错误 2 make: *** [all] 错误 2
    • 您需要使用 SFML 2.2 才能使用 TGUI 0.6.7。如果您确实需要较旧的 sfml 版本,您可以随时选择 older release。 v0.6.7 之前的版本将与 SFML 2.1 一起使用。但是如果你打算在 windows 或 mac 上部署你的程序,那么我建议你使用 v0.6.7。不过对于 linux,只有在 v0.6.6 之后发生了变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多