【问题标题】:Cmake "No rule to make target" while building shared library构建共享库时Cmake“没有制定目标的规则”
【发布时间】:2016-01-27 10:24:50
【问题描述】:

我正在尝试使用 CMake 在同一个项目中构建一个 vala 应用程序和一个自己的库。构建应用程序工作正常,因此我使用以下 CMakeLists.txt 向我的项目添加了一个新的“lib”目录:

# 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

糟糕的是,我对 CMake 不是很熟悉,并且不明白该错误消息的含义,也不知道是什么原因造成的。 我已经在另一个项目中将我的 CMakeLists.txt 文件与它们进行了比较,该项目也是由“普通”应用程序和一个库构建的,但我找不到导致我的代码无法工作的差异:http://bazaar.launchpad.net/~wingpanel-devs/wingpanel/trunk/files/head:/

如果你能给我一些我在 CMake 文件中可能遗漏的提示,那就太好了。

【问题讨论】:

    标签: build cmake makefile shared-libraries vala


    【解决方案1】:

    对于那些有同样问题的人:我现在自己解决了这个问题,从vala_precompile (LIB_VALA_C ${LIB_NAME} 行中删除了${LIB_NAME}。我仍然不确定这里发生了什么,但这个“解决方案”似乎有效。

    我们仍然赞赏解决此问题的更好方法。 ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 2015-09-26
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      相关资源
      最近更新 更多