EDIT ===================
apr-1はapacheポータブルランタイムであり、共有ライブラリを作成するために自分でダウンロードしてコンパイルしました(したがって、cmakeによって作成されたものではありません)。ターゲットシステムでCPackを実行した後、このライブラリに対してリンクする必要があります。
私の開発プロジェクトディレクトリ:
read_config/bin
/libs
/include
/src
/build
私のCMakeLists.txtの場合、すべてが正常にインストールされますが、ライブラリの新しい場所が見つからないため、リンクの問題が発生します。
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/libs)
を使用しているので、これは必要ないので削除しましたFIND_LIBRARY
。
そして、以下を追加しました:
# Find the library in the libs folder
FIND_LIBRARY(APR_LIBS NAMES "apr-1" PATHS ${PROJECT_SOURCE_DIR}/libs)
# Print out the path to see if its correct
MESSAGE(${APR_LIBS})
# Link the library with the executable
TARGET_LINK_LIBRARIES(cfg ${APR_LIBS})
# Install the libs folder
INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/libs/
DESTINATION libs)
# Install the executable in the bin folder
INSTALL(TARGETS cfg
RUNTIME DESTINATION bin)
すべてが正常にインストールされますが、実行可能ファイルをチェックして、リンク先のライブラリを確認するとapr-1
、間違った場所にあるため、実行可能ファイルを見つけることができません。
libapr-1.so.0 => not found
これは、インストールパッケージをコンパイル元とは異なる新しい場所に抽出したためです。コンパイルされたディレクトリから、これを取得します。これは正常に実行されます。
libapr-1.so.0 => /home/devel/projects/read_config/libs/libapr-1.so.0 (0xf7746000)
インストール後、ターゲットのインストールマシンにこのディレクトリ構造があるため、実行可能ファイルは新しいlibs/apr-1
ライブラリにリンクします。
target directory/
/bin
/libs/apr-1
さらなる提案に感謝します、
========================================
gcc(GCC)4.7.2cmakeバージョン2.8.9Fedora 17
こんにちは、
次のエラーが発生します:
CMake Error at src/CMakeLists.txt:14 (INSTALL):
install TARGETS given target "apr-1" which does not exist in this
directory.
私は次のディレクトリを持っています:
read_config/
/build - out of source build
/CMakeLists.txt
/include - apr include files
/libs - apr libraries
/src - project source files *.h *.c CMakeLists.txt
私のルートCMakeLists.txtには、次のものがあります。
# Name of project and compiler to use
PROJECT(read_cfg C)
# Set compiler flags
IF(CMAKE_COMPILER_IS_GNUCC)
MESSAGE(STATUS "COMPILER IS GNUCC")
SET(CMAKE_C_FLAGS "-Wall -Wextra -m32 -Wunreachable-code -ggdb -O0 -D_DEBUG -D_LARGEFILE64_SOURCE")
ENDIF(CMAKE_COMPILER_IS_GNUCC)
# Where the include files can be found
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/read_config/include)
# Where the libraries can be found
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/read_config/libs)
ADD_SUBDIRECTORY(src)
私のsrcディレクトリには、次のCMakeLists.txtがあります。
# Create the executable and link the libraries into it
ADD_EXECUTABLE(cfg test_config.c)
# Place executable in bin directory
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
# Add libraries
IF(CMAKE_COMPILER_IS_GNUCC)
MESSAGE(STATUS "Linking cfg library")
TARGET_LINK_LIBRARIES(cfg apr-1)
ENDIF(CMAKE_COMPILER_IS_GNUCC)
INSTALL(TARGETS cfg
RUNTIME
DESTINATION bin)
INSTALL(TARGETS apr-1
ARCHIVE
DESTINATION lib)
SET(CPACK_PACKAGE_NAME "rd_cfg")
SET(CPACK_PACKAGE_VENDOR "sun.com")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "rd_cfg - CPack read_config installation")
SET(CPACK_PACKAGE_VERSION "1.0.0")
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Read_config_install_dir")
INCLUDE(CPack)
問題はここにあるこの行です:
INSTALL(TARGETS apr-1
ARCHIVE
DESTINATION lib)
私は次のことをやってみました
INSTALL(TARGETS ${CMAKE_SOURCE_DIR}/libs/apr-1
ARCHIVE
DESTINATION lib)
しかし、それでもライブラリを見つけることができません。
また、次のようなパスを使用します。
INSTALL(TARGETS src/libs
ARCHIVE
DESTINATION lib)
このようにディレクトリを配置できるようにしたいので、各ライブラリを指定する必要はありませんが、次のようなディレクトリだけを指定する必要があります。
INSTALL(TARGETS ${CMAKE_SOURCE_DIR}/libs
ARCHIVE
DESTINATION lib)
したがって、そのディレクトリ内のすべてのライブラリを見つけることができます。私はそれらの約5つを持っています。
提案をありがとう、