2012-10-29 39 views
1

好吧,所以我刚开始玩CMake。我正在尝试构建一个依赖于MySQL和CURL的项目。这是目录结构:Cmake链接到MySQL和卷曲,LNK2019

./ 
    ./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) 

回答

1

你不需要在这种情况下LINK_DIRECTORIES()调用,因为它告诉编译器在哪里找库。

相反,使用

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

因为${MYSQL_LIBRARIES}包含绝对路径。

+0

在你给我答案前不久我发现了它。然而,尽管现在它在Linux上构建得很好,但它并不想在Windows上构建 - 我仍然遇到链接器错误。可悲的是我目前无法测试,我正在重新安装VS2012。 – Warpten