Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 使用CMake添加库Qt和LuaJIT/Lua51_Visual Studio_Qt_Lua_Cmake_Qt5 - Fatal编程技术网

Visual studio 使用CMake添加库Qt和LuaJIT/Lua51

Visual studio 使用CMake添加库Qt和LuaJIT/Lua51,visual-studio,qt,lua,cmake,qt5,Visual Studio,Qt,Lua,Cmake,Qt5,我正在尝试将CMake与将在VisualStudio2012上运行的Qt和LuaJIT一起使用。我设法运行了Qt,但我不知道如何将LuaJIT库添加到项目中。我使用的是克隆自的LuaJIT源代码,它是通过运行.bat文件构建的 我不在乎LuaJIT将由CMake构建,我只需要链接库并向项目添加标题 我从项目中删除了lib文件夹。。。不值得麻烦的是,将依赖性与不包含cmake文件的项目结合起来:D 我的项目层次结构是: +lib -luajit-2.0 +src -my sources +

我正在尝试将CMake与将在VisualStudio2012上运行的Qt和LuaJIT一起使用。我设法运行了Qt,但我不知道如何将LuaJIT库添加到项目中。我使用的是克隆自的LuaJIT源代码,它是通过运行.bat文件构建的

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

我从项目中删除了lib文件夹。。。不值得麻烦的是,将依赖性与不包含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\u包(Lua51)
  • 您的库必须以某种方式对CMake可见。在Windows上,最简单的方法是将它们添加到PATH变量中。或者,您可以将库的路径添加到CMake变量
    CMake\u PREFIX\u path
    。打开find模块,例如
    FindLua51.cmake
    ,您将看到库必须如何组织。在windows上,我必须安装LuaJIT手动创建的LuaJIT文件夹,并将*.h文件放入子文件夹,*.dll放入bin子文件夹,*.lib放入lib子文件夹。然后将bin文件夹添加到PATH,并将LUA_DIR设置为LuaJIT文件夹
  • 在包含文件夹上使用
    include\u目录
  • 然后您必须链接库
    目标链接库
    ,但在
    之后添加可执行文件
我的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 ()

您缺少实际链接,您可以使用以下语句对其进行修改:

target_link_libraries(${PROJECT} luajit-5.1)
当然,如果这个LuaJIT可以有一个cmake-find模块,或者根据其确切的构建系统的配置/版本文件,那就更好了

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

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

target_link_libraries(${PROJECT} ${LUA_LIBRARIES})
include_directories(${LUA_INCLUDE_DIR})
您可以看到,通过这种方式,它将变得更加动态,而不是硬编码确切的名称。详细信息将留给find模块

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

target_link_libraries(${PROJECT} ${LUA_LIBRARIES})
include_directories(${LUA_INCLUDE_DIR})
这将分别负责自动查找include目录,而无需对其进行硬编码

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

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
您需要将下载的find模块放入“cmake”子文件夹中

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


非常感谢您的回复!我添加了这些行
set(LUA_INCLUDE_DIR“lib/luajit-2.0/src”)INCLUDE_目录(${LUA_INCLUDE_DIR})
,并成功地包含了luajit库的头:),但仍然不知道如何链接它。所以我会用你发给我的链接来处理它。。。