2015-10-27 80 views
0

我試圖在同一個項目中使用CMake與自己的庫一起構建一個vala應用程序。構建應用程序工作正常,所以我添加了一個新的「lib」目錄到我的項目具有以下的CMakeLists.txt:Cmake「沒有規則制定目標」,同時構建共享庫

# Configure precompile 
vala_precompile (LIB_VALA_C ${LIB_NAME} 
    Session.vala 
PACKAGES 
    gio-2.0 
    gee-0.8 
OPTIONS 
    --thread 
    --vapidir=${CMAKE_SOURCE_DIR}/vapi 
    --target-glib 2.32 
GENERATE_VAPI 
    ${LIB_NAME} 
GENERATE_HEADER 
    ${CMAKE_PROJECT_NAME} 
) 

# Add executable 
add_library (${LIB_NAME} SHARED ${LIB_VALA_C}) 

# Set library properties 
set_target_properties (${LIB_NAME} PROPERTIES 
    OUTPUT_NAME ${LIB_NAME} 
    VERSION ${LIB_SOVERSION}.${LIB_VERSION} 
    SOVERSION ${LIB_SOVERSION} 
) 

target_link_libraries (${LIB_NAME} ${LIB_LIBRARIES}) 

# Installation 
install (TARGETS ${LIB_NAME} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/) 
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}.pc DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig/) 
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}.vapi DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/vala/vapi/) 
install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/${LIB_NAME}.deps DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/vala/vapi/) 
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.h DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/${LIB_NAME}/) 

中的CMakeLists.txt在項目的根目錄包含以下內容:

# Project name 
project (drop) 

# Minimum requirements of build-system 
cmake_minimum_required (VERSION 2.8) 
cmake_policy (VERSION 2.6) 

# Global configuration 
set (DATADIR "${CMAKE_INSTALL_PREFIX}/share") 
set (PKGDATADIR "${DATADIR}/${CMAKE_PROJECT_NAME}") 
set (GETTEXT_PACKAGE "${CMAKE_PROJECT_NAME}") 
set (RELEASE_NAME "${CMAKE_PROJECT_NAME}") 
set (VERSION "0.1") 
set (VERSION_INFO "Release") 
set (PREFIX ${CMAKE_INSTALL_PREFIX}) 
set (DOLLAR "$") 

# Library configuration 
set (LIB_VERSION 1.0) 
set (LIB_SOVERSION 0) 
set (LIB_NAME ${CMAKE_PROJECT_NAME}-${LIB_VERSION}) 

# Cmake-files 
list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) 

# Configuration file 
configure_file (${CMAKE_SOURCE_DIR}/dropd/config.vala.cmake ${CMAKE_SOURCE_DIR}/dropd/config.vala) 

# Check for vala 
find_package (Vala REQUIRED) 
include (ValaVersion) 
ensure_vala_version ("0.18" MINIMUM) 
include (ValaPrecompile) 

# Disable C compiler warnings 
add_definitions (-w) 

# Set gettext-package 
add_definitions (-DGETTEXT_PACKAGE="${CMAKE_PROJECT_NAME}") 

# Check for required dependencies 
find_package (PkgConfig) 
pkg_check_modules (DEPS REQUIRED granite gthread-2.0 gio-2.0 gee-0.8 avahi-gobject avahi-client) 

# Link the avahi library 
add_definitions (-lavahi) 

# Link dependencies 
add_definitions (${DEPS_CFLAGS}) 
add_definitions (${LIB_CFLAGS}) 
link_libraries (${DEPS_LIBRARIES}) 
link_directories (${DEPS_LIBRARY_DIRS}) 
link_directories (${LIB_LIBRARY_DIRS}) 

# Load directories 
add_subdirectory (dropd) 
add_subdirectory (lib) 
add_subdirectory (po) 
add_subdirectory (data) 
add_subdirectory (schemas) 

構建項目現在主要的應用程序仍然建立沒有問題,但是當庫的構建開始這個錯誤顯示(翻譯):

make[2]: *** No rule to make »../lib/drop-1.0«, 
    required by »lib/drop-1.0«. End. 
make[1]: *** [lib/CMakeFiles/drop-1.0.dir/all] Errors 2 
make: *** [all] Errors 2 

不好我不是塔t與CMake很相似,並沒有得到那個錯誤信息的含義,也不知道是什麼導致了它。 我已經比我與他們的CMakeLists.txt文件中說的也是內置了一個「正常」的應用程序和一個圖書館的另一個項目,但我找不到,使我的代碼不工作的區別:http://bazaar.launchpad.net/~wingpanel-devs/wingpanel/trunk/files/head:/

它如果你能給我一些我可以在CMake-Files中錯過的提示,那將是非常好的。

回答

0

對於具有相同問題的人:我現在通過從行vala_precompile (LIB_VALA_C ${LIB_NAME}中刪除${LIB_NAME}來解決問題。我仍然不知道這裏發生了什麼,但這個「解決方案」似乎工作。

解決此問題的更好方法仍然值得讚賞。 ;)

相關問題