【问题标题】:Add libraries Qt and LuaJIT / Lua51 with CMake使用 CMake 添加库 Qt 和 LuaJIT / Lua51
【发布时间】:2014-01-08 22:27:05
【问题描述】:

我正在尝试将 CMake 与将在 Visual Studio 2012 上运行的 Qt 和 LuaJIT 一起使用。我设法以某种方式运行 Qt,但我不知道如何将 LuaJIT 库添加到项目中。我正在使用从http://luajit.org/git/luajit-2.0.git 克隆的 LuaJIT 源,它是通过运行 .bat 文件构建的。

我不关心 LuaJIT 将由 CMake 构建,我只需要链接库并将标题添加到项目中。

我从我的项目中删除了 lib 文件夹...不值得麻烦将依赖项与项目 whitout cmake 文件相结合:D

我的项目层次结构是:

+lib
  -luajit-2.0
+src
  -my sources
+ui
  -ui files
-CMakeLists.txt

CMakeLists.txt 文件如下所示:

cmake_minimum_required(VERSION 2.8.12)

set(PROJECT "Grapedit")

project(${PROJECT})

# Qt Stuff
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

find_package(Qt5Widgets REQUIRED)

set(SOURCE_FILES
  src/main.cpp
  src/mainwindow.h
  src/mainwindow.cpp
)

set(UI_FILES
  ui/mainwindow.ui
)
source_group("UI Files" FILES ${UI_FILES})

qt5_wrap_ui(UI_HEADERS ${UI_FILES})
source_group("Generated UI Headers" FILES ${UI_HEADERS})

add_executable(${PROJECT} ${SOURCE_FILES} ${UI_HEADERS} ${UI_FILES})

qt5_use_modules(${PROJECT} Widgets)

我的解决方案

所以它终于起作用了,我犯了几个新手错误...... :) 我会为其他人写下来:

  • 不知道什么是查找模块...这将搜索环境并设置库的位置或标记它没有找到它们。由于 LuaJIT 与 Lua51 兼容,您可以使用 find_package(Lua51)
  • 您的库必须以某种方式对 CMake 可见。在 Windows 上,最简单的方法是将它们添加到 PATH 变量中。或者,您可以将库的路径添加到 CMake 变量 CMAKE_PREFIX_PATH。打开查找模块,例如FindLua51.cmake,您将看到您的库必须如何组织。在 Windows 上,我必须手动安装 LuaJIT - 创建 LuaJIT 文件夹,并将 *.h 文件放入包含子文件夹,将 *.dll 放入 bin 子文件夹,将 *.lib 放入 lib 子文件夹。然后将 bin 文件夹添加到 PATH 并将 LUA_DIR 设置为 LuaJIT 文件夹。
  • 在包含文件夹上使用include_directories
  • 那么你必须链接库target_link_libraries,但在add_executable之后!

我的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 2.8.12)

# Declare project variables...

set (PROJECT "Grapedit")

set (
    SOURCE_FILES
    src/main.cpp
    src/mainwindow.h
    src/mainwindow.cpp
)

set(UI_FILES
    ui/mainwindow.ui
)

# Set project name
project(${PROJECT})

# Include Lua directories
include_directories(${LUA_INCLUDE_DIR})

# Qt Stuff
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

# Find packages...

# Will find also LuaJIT, but must be named same as Lua51 and installed into directories
find_package(Lua51)

# Find Qt modules, every module separately
find_package(Qt5Widgets REQUIRED)

# Create nice groups in IDEs
source_group("UI Files" FILES ${UI_FILES})
source_group("Generated UI Headers" FILES ${UI_HEADERS})

# Use Qt UI files
qt5_wrap_ui(UI_HEADERS ${UI_FILES})

# Create executable
add_executable (
    ${PROJECT} 
    ${SOURCE_FILES} 
    ${UI_HEADERS} 
    ${UI_FILES}
)

# Link libraries... 
# Must be after executable is created!

# Link Qt modules
qt5_use_modules (
    ${PROJECT} 
    Widgets
)

# Link Lua
target_link_libraries(${PROJECT} ${LUA_LIBRARIES})

# Will not show new windows prompt when running program
if (MSVC)
  set_target_properties(${PROJECT} PROPERTIES
    WIN32_EXECUTABLE YES
    LINK_FLAGS "/ENTRY:mainCRTStartup"
  )
endif ()

【问题讨论】:

    标签: visual-studio qt lua cmake qt5


    【解决方案1】:

    您缺少可以使用以下语句修改的实际链接:

    target_link_libraries(${PROJECT} luajit-5.1)
    

    当然,如果这个 lua jit 可以有一个 cmake 查找模块或配置/版本文件,这会更好,具体取决于它的确切构建系统。

    您可以从这里获取查找模块:

    https://github.com/brimworks/lua-zlib/blob/master/cmake/Modules/FindLuaJIT.cmake

    然后你可以按如下方式链接它:

    target_link_libraries(${PROJECT} ${LUA_LIBRARIES})
    

    您可以看到,这种方式会变得更加动态,而不是硬编码确切的名称。查找模块的详细信息将留在查找模块中。

    请注意,您可能需要使用相应的变量来包含标题,如下所示:

    include_directories(${LUA_INCLUDE_DIR})
    

    这将分别负责自动查找包含目录,而无需您对其进行硬编码。

    您还需要将以下行添加到您的 CMakeLists.txt 中:

    set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
    

    您需要将下载的查找模块放入“cmake”子文件夹中。

    有关此主题的更多详细信息,请参阅以下页面:

    CMake:How To Find Libraries

    【讨论】:

    • 非常感谢您的回复!我添加了这些行set(LUA_INCLUDE_DIR "lib/luajit-2.0/src") include_directories(${LUA_INCLUDE_DIR}) 并成功包含了 luaJIT 库的标题:) 但仍然不知道如何链接它。因此,我将使用您发送给我的链接进行处理...
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多