1

わかりましたので、CMake をいじり始めました。MySQL と CURL の両方に依存するプロジェクトを構築しようとしています。これはディレクトリ構造です:

./
    ./src
    ./cmake
    CMakeLists.txt

実にシンプルで、src には 9 つの Cpp ファイルと CMakeLists.txt しか含まれていません。

CMake を実行すると、すべて正常に動作します。MySQL と CURL が効果的にリンクされていないため、リンカ エラーが大量に発生します。私は何を間違っていますか?

ルート CMakeLists.txt:

PROJECT(IRCBot)

INCLUDE(CPack)

SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
INCLUDE(${CMAKE_SOURCE_DIR}/cmake/FindCURL.cmake)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)

FIND_PACKAGE(CURL)
IF(CURL_FOUND)
  MESSAGE(STATUS "Curl libraries found at: ${CURL_LIBRARIES}")
  MESSAGE(STATUS "Curl includes found at: ${CURL_INCLUDE_DIRS}")
else()
  MESSAGE(SEND_ERROR "Could not find cURL on your system")
ENDIF(CURL_FOUND)

FIND_PACKAGE(MySQL)
IF(MYSQL_FOUND)
    MESSAGE(STATUS "MySQL found at: ${MYSQL_INCLUDE_DIR}, ${MYSQL_LIBRARIES}")
ELSE(MYSQL_FOUND)
    MESSAGE(SEND_ERROR "Couldn't find MySQL include files and/or library")
ENDIF(MYSQL_FOUND)

ADD_SUBDIRECTORY(src)

そして ./src/CMakeLists.txt

FILE(GLOB_RECURSE IRCBot_files *.cpp *.h)

SET(IRCBot_src
    ${IRCBot_files}
    )

INCLUDE_DIRECTORIES(
    ${CURL_INCLUDE_DIRS}
    ${MYSQL_INCLUDE_DIR}
    )

LINK_DIRECTORIES(
    ${MYSQL_LIBRARIES}
    ${CURL_LIBRARIES}
)
ADD_EXECUTABLE(IRCBot ${IRCBot_src})

INSTALL(TARGETS IRCBot DESTINATION ${INSTALL_DIR}/bin)
4

1 に答える 1

1

LINK_DIRECTORIES()この場合、呼び出しは必要ありません。これは、ライブラリの場所をコンパイラに伝えるためです。

代わりに、

TARGET_LINK_LIBRARIES(IRCBot
    ${MYSQL_LIBRARIES}
    ${CURL_LIBRARIES})

${MYSQL_LIBRARIES}絶対パスが含まれているためです。

于 2012-10-29T15:04:47.070 に答える