Visual studio 使用CMake添加库Qt和LuaJIT/Lua51
我正在尝试将CMake与将在VisualStudio2012上运行的Qt和LuaJIT一起使用。我设法运行了Qt,但我不知道如何将LuaJIT库添加到项目中。我使用的是克隆自的LuaJIT源代码,它是通过运行.bat文件构建的 我不在乎LuaJIT将由CMake构建,我只需要链接库并向项目添加标题 我从项目中删除了lib文件夹。。。不值得麻烦的是,将依赖性与不包含cmake文件的项目结合起来:D 我的项目层次结构是: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 +
+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变量
。打开find模块,例如CMake\u PREFIX\u path
,您将看到库必须如何组织。在windows上,我必须安装LuaJIT手动创建的LuaJIT文件夹,并将*.h文件放入子文件夹,*.dll放入bin子文件夹,*.lib放入lib子文件夹。然后将bin文件夹添加到PATH,并将LUA_DIR设置为LuaJIT文件夹FindLua51.cmake
- 在包含文件夹上使用
include\u目录
- 然后您必须链接库
,但在目标链接库
李>之后添加可执行文件
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库的头:),但仍然不知道如何链接它。所以我会用你发给我的链接来处理它。。。