【发布时间】: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