Я пытаюсь использовать CMake с Qt и LuaJIT, который будет работать в Visual Studio 2012. Мне каким-то образом удалось запустить Qt, но я не знаю, как добавить библиотеку LuaJIT в проект. Я использую источник LuaJIT, клонированный с http://luajit.org/git/luajit-2.0.git, который создается путем запуска файла .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_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 ()