[CMake] Linker ignores LINK_DIRECTORIES

Bill Hoffman bill.hoffman at kitware.com
Wed Apr 23 08:30:25 EDT 2008


Gabor Fekete wrote:
> Hi,
> 
> I use LINK_DIRECTORIES to specify the library directories for cmake. But during
> compilation I see (with CMAKE_VERBOSE_MAKEFILE) that the linker (ld) is not
> called with the paths that were specified in LINK_DIRECTORIES.
> What can be the reason?
> 
> Here is my cmake list file:
> 
> PROJECT(rat-server)
> SET(NAME testprog)
> SET(VERSION 0.0.1)
> SET(SRC_DIR ../src)
> FILE(GLOB HeaderFiles "${SRC_DIR}/*.h")
> FILE(GLOB SourceFiles "${SRC_DIR}/*.c")
> 
> #
> # Below this line you MAY make modifications.
> #
> SET(CMAKE_VERBOSE_MAKEFILE ON)
> 
> ADD_EXECUTABLE(${NAME} ${SourceFiles})
> 
> SET(XTRA_PREFIX $ENV{XTRA_PREFIX})
> IF (NOT XTRA_PREFIX)
> 	SET(XTRA_PREFIX /usr/local)
> ENDIF (NOT XTRA_PREFIX)
> 
> INCLUDE(FindPkgConfig)
> pkg_check_modules(DBUS REQUIRED dbus-1)
> pkg_check_modules(SQL REQUIRED sqlite3)
> pkg_check_modules(SSL REQUIRED openssl)
> INCLUDE_DIRECTORIES(${DBUS_INCLUDE_DIRS} ${SQL_INCLUDE_DIRS}
>  ${SSL_INCLUDE_DIRS})
> LINK_DIRECTORIES(${DBUS_LIBRARY_DIRS} ${SQL_LIBRARY_DIRS}
>  ${SSL_LIBRARY_DIRS})
> TARGET_LINK_LIBRARIES(${NAME}
> 			pthread ipq
> 			${DBUS_LIBRARIES} ${SQL_LIBRARIES} ${SSL_LIBRARIES} ${RACOMMON_LIBRARIES})
> 
> ADD_DEFINITIONS("-Wall" "$ENV{XTRA_FLAGS}")
> 
> INSTALL(FILES ./${NAME} DESTINATION ${XTRA_PREFIX}/bin)
> 
> ADD_CUSTOM_TARGET(uninstall
> 	COMMAND "rm" -rf "${XTRA_PREFIX}/bin/${NAME}"
> )
> 
> When I run make after cmake, ld complains about libipq, but it is indeed present
> in the LINK_DIRECTORIES. libipq.a is a static library, if it matters.
> LINK_DIRECTORIES is used by gcc when compiling single c files, but not used
> for linking.
> 

LINK_DIRECTORIES only affects targets that come AFTER it.  So, you need 
to move your add_executable to be after the link_directories call.

-Bill



More information about the CMake mailing list