2014-01-08 43 views
1

我想用Qake和LuaJIT將在Visual Studio 2012上運行CMake。我管理某種方式來運行Qt,但我不知道如何將LuaJIT庫添加到項目。我使用從http://luajit.org/git/luajit-2.0.git克隆的LuaJIT的源代碼,它是通過運行.bat文件構建的。用CMake添加庫Qt和LuaJIT/Lua51

我不在乎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 manualy - 創建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() 

回答

1

你缺少實際連接,你可以用下面的語句修改:

target_link_libraries(${PROJECT} luajit-5.1) 

可以肯定,這將是如果更好這個lua jit可以有一個cmake查找模塊,或者配置/版本文件,具體取決於它的確切構建系統。

你可以從這裏搶查找模塊:

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

然後,你可以針對其鏈接如下:

target_link_libraries(${PROJECT} ${LUA_LIBRARIES}) 

你可以看到,它會變得更有活力這種方式,而而不是硬編碼確切的名字。解決這個問題的細節將留在查找模塊中。

請注意,你可能需要使用相應的變量爲頭包接如下:

include_directories(${LUA_INCLUDE_DIR}) 

這會照顧自動查找包括目錄,分別,沒有你硬編碼。

您還需要將下面的行添加到您的CMakeLists.txt:

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 

,你需要下載Find模塊放到一個「cmake的」子文件夾。

請參閱下頁有關此主題的更多細節一般:

CMake:How To Find Libraries

+0

非常感謝響應! 我添加了這些行 '設置(LUA_INCLUDE_DIR 「LIB/luajit-2.0/src目錄」) include_directories($ {} LUA_INCLUDE_DIR)' 和successfuly包括luaJIT庫的頭:) 但仍然不知道如何鏈接它。所以我會用你發給我的那個鏈接來處理它... – AdUki

+0

@AdUki:你解決了嗎? – lpapp

+0

是的,在我的解決方案下 – AdUki