나는 Cmake 문제에서 거의 완전 바보라는 말을하기 시작할 것입니다.Cmake target_link_libraries가 내 라이브러리를 연결하지 않음
내가 가지고는 A Kdevelop 4.1 프로젝트에 대한 CMakeLists.txt
을 다음
project(uart)
find_package(KDE4 REQUIRED)
include (KDE4Defaults)
include_directories(${KDE4_INCLUDES} ${QT_INCLUDES} src/include src/include/QSerialDevce)
add_subdirectory(doc)
add_subdirectory(src)
add_subdirectory(icons)
link_directories(/usr/lib)
find_library(SERIALDEVICE_LIB qserialdeviced)
add_executable(uart ${uart_SRCS})
target_link_libraries(uart ${SERIALDEVICE_LIB})
내 프로젝트를 빌드 할 때 나는 참조 : 내가 읽은
uart/build> make -j2
-- Found Qt-Version 4.6.3 (using /usr/bin/qmake-qt4)
-- Found X11: /usr/lib64/libX11.so
-- Found KDE 4.5 include dir: /usr/include/kde4
-- Found KDE 4.5 library dir: /usr/lib64/kde4/devel
-- Found the KDE4 kconfig_compiler4 preprocessor: /usr/bin/kconfig_compiler4
-- Found automoc4: /usr/bin/automoc4
CMake Error at CMakeLists.txt:16 (add_executable):
add_executable called with incorrect number of arguments
CMake Error: Attempt to add link library "/usr/lib/libqserialdeviced.so" to target "uart" which is not built by this project.
-- Configuring incomplete, errors occurred!
make: *** [cmake_check_build_system] Error 1
*** Failed ***
모든 add_executable
및 target_link_libraries
모양을해야한다고 말한다 내 파일의 마지막 두 줄 :
add_executable(uart ${uart_SRCS})
target_link_libraries(uart ${SERIALDEVICE_LIB})
내가로 떠나는
CMakeLists.txt
의 두 라인을 변경하는 경우3210
는 :
project(uart)
find_package(KDE4 REQUIRED)
include (KDE4Defaults)
include_directories(${KDE4_INCLUDES} ${QT_INCLUDES} src/include src/include/QSerialDevce)
add_subdirectory(doc)
add_subdirectory(src)
add_subdirectory(icons)
link_directories(/usr/lib)
find_library(SERIALDEVICE_LIB qserialdeviced)
target_link_libraries(${SERIALDEVICE_LIB})
나는 참조 : target_link_libraries
내 qserialdeviced
연결되지 않도록
uart/build> make -j2
-- Found Qt-Version 4.6.3 (using /usr/bin/qmake-qt4)
-- Found X11: /usr/lib64/libX11.so
-- Found KDE 4.5 include dir: /usr/include/kde4
-- Found KDE 4.5 library dir: /usr/lib64/kde4/devel
-- Found the KDE4 kconfig_compiler4 preprocessor: /usr/bin/kconfig_compiler4
-- Found automoc4: /usr/bin/automoc4
-- Configuring done
-- Generating done
-- Build files have been written to: uart/build
[ 11%] Built target doc-handbook
[ 11%] Built target uart_automoc
Linking CXX executable uart
CMakeFiles/uart.dir/uart.o: In function `uart::setupSerial()':
uart/src/uart.cpp:126: undefined reference to `AbstractSerial::AbstractSerial(QObject*)'
CMakeFiles/uart.dir/uart.o: In function `uart::setupEnumerator()':
uart/src/uart.cpp:108: undefined reference to `SerialDeviceEnumerator::SerialDeviceEnumerator(QObject*)'
CMakeFiles/uart.dir/uart.o: In function `uart::setupSerial()':
uart_/uart/src/uart.cpp:136: undefined reference to `AbstractSerial::enableEmitStatus(bool)'
CMakeFiles/uart.dir/uart.o: In function `uart::setupEnumerator()':
uart_/uart/src/uart.cpp:112: undefined reference to `SerialDeviceEnumerator::setEnabled(bool)'
collect2: ld returned 1 exit status
make[2]: *** [src/uart] Error 1
make[1]: *** [src/CMakeFiles/uart.dir/all] Error 2
make: *** [all] Error 2
*** Failed ***
명확하게 보여줍니다.
qserialdeviced
은 /usr/lib/libqserialdeviced.so
으로 정확하게 연결되어 있으며 수동으로 Makefile에 추가하면 쉽게 찾을 수 있습니다.
가 나는 분명히 시도 : 변화없이
target_link_libraries(-lqserialdeviced)
.
는 또한 시도 :
이if ("${SERIALDEVICE_LIB}" STREQUAL "SERIALDEVICE_LIB-NOTFOUND")
message(FATAL_ERROR "'qserialdeviced' wasn't found!")
else()
message("'qserialdeviced' found: " ${SERIALDEVICE_LIB})
endif()
그러나이 테스트가 성공합니다. 라이브러리를 찾았습니다 :
아무도 도와 줄 수 없습니까?
저는 Linux Fedora 13, cmake 버전 2.8.0, gcc (GCC) 4.4.5 20101112 (Red Hat 4.4.5-2) 및 kdevelop-4.1.0-1.fc13.x86_64를 사용하고 있습니다.
감사드립니다.
편집 :
@DatChu에 의해 제안, 나는 내 하위 디렉토리와 모든 걸쳐 CMakeLists.txt
지금 나에게 의미가 분할합니다.
감사합니다. everbody!
원래 CMakeLists.txt 파일의 경우
아니, 내가 그것을 설정하지 않은,하지만'add_executable UART (SRC/MAIN.CPP의 SRC/uart.cpp 그런 짓을하려고합니다 ...)'. 나는'add_subdirectory (src)'이후에 모든 소스 파일의 이름을 반복하는 것이별로 좋지 않기 때문에 중단했다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 나는 모든 ".cpp"파일을 수동으로 추가하려고 할 때에도 에로트를 언급해야합니다. 원한다면 실수로 내 게시물에 넣을 수 있습니다. 감사. – j4x
원본 CMakeLists.txt 파일을 프로젝트의 파일들과 함께 업데이트 할 수 있다면 CMake에 필요한 것을 제안 할 수 있습니다 –
'file (GLOB ...) '을 사용하지 마십시오 : http://www.cmake.org/pipermail/cmake/2010-July/037984.html 및 http://www.cmake.org/pipermail/cmake/2010-September/039562.html –