首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用LuaJIT / Lua51添加Qt和CMake /CMake库

使用LuaJIT / Lua51添加Qt和CMake /CMake库
EN

Stack Overflow用户
提问于 2014-01-08 22:27:05
回答 1查看 1.7K关注 0票数 1

我试图将CMake与将在2012上运行的Qt和LuaJIT结合使用。我设法运行了Qt,但不知道如何将LuaJIT库添加到项目中。我使用的是从LuaJIT中克隆的http://luajit.org/git/luajit-2.0.git源代码,该源代码是通过运行.bat文件构建的。

我不在乎LuaJIT将由CMake构建,我只需要链接库并向项目添加标题。

我从我的项目中删除了lib文件夹..。与项目白化cmake文件:D一起使用依赖关系是不值得的。

我的项目层次是:

代码语言:javascript
运行
复制
+lib
  -luajit-2.0
+src
  -my sources
+ui
  -ui files
-CMakeLists.txt

CMakeLists.txt文件如下所示:

代码语言:javascript
运行
复制
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上,最简单的方法是将它们添加到路径变量中。也可以将库的路径添加到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文件:

代码语言:javascript
运行
复制
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 ()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-09 00:50:55

您遗漏了实际的链接,您可以用以下语句修改链接:

代码语言:javascript
运行
复制
target_link_libraries(${PROJECT} luajit-5.1)

当然,如果这个lua可以有一个cmake模块,或者配置/版本文件(取决于其确切的构建系统),那就更好了。

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

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

然后您可以链接到它,如下所示:

代码语言:javascript
运行
复制
target_link_libraries(${PROJECT} ${LUA_LIBRARIES})

您可以看到,它将变得更加动态这样,而不是硬编码的确切名称。用于计算的细节将留给find模块。

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

代码语言:javascript
运行
复制
include_directories(${LUA_INCLUDE_DIR})

这将处理自动查找包含目录,而不需要硬编码它。

您还需要在CMakeLists.txt中添加以下行:

代码语言:javascript
运行
复制
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

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

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

CMake:如何找到图书馆

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21007922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档