2016-07-06 3 views
0

저는 cmake를 사용하고 있습니다. cmake를 사용하여 랩톱에서 프로젝트를 컴파일 할 수 있었지만 라스베리에서는 작동하지 않습니다.CMake는 라스베리에 컴파일하지 않습니다.

cmake_minimum_required (VERSION 2.6) 
project (TestPL) 

include_directories("${PROJECT_BINARY_DIR}") 
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") 

find_package(GLIB REQUIRED) 
find_package(MHD REQUIRED) 

add_subdirectory (librerie) 
set (EXTRA_LIBS ${EXTRA_LIBS} librerie) 

include_directories (${GLib_INCLUDE_DIRS} ${EXTRA_LIBS}) 

# add the executable 
add_executable(TestPL main.c) 
target_link_libraries (TestPL ${GLib_LIBRARY} ${MHD_LIBRARY} ${EXTRA_LIBS} m) 

이 librerie에서 CMakeLists입니다 :

-- The C compiler identification is GNU 4.9.2 
-- The CXX compiler identification is GNU 4.9.2 
-- Check for working C compiler: /usr/bin/cc 
-- Check for working C compiler: /usr/bin/cc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/c++ 
-- Check for working CXX compiler: /usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.28") 
-- checking for one of the modules 'glib-2.0' 
-- Found GLib: /usr/lib/arm-linux-gnueabihf/libglib-2.0.so (found version "2.42.1") 
-- Found mhd: /usr/include 
CMake Error at cmake/FindGLIB.cmake:39 (add_library): add_library cannot create imported target "glib-2.0" because another target with the same name already exists. 
Call Stack (most recent call first):librerie/CMakeLists.txt:2 (find_package) 

-- Found GLib: /usr/lib/arm-linux-gnueabihf/libglib-2.0.so (found version "2.42.1") 
-- Configuring incomplete, errors occurred! 
See also "/home/pi/pl1/CMakeFiles/CMakeOutput.log". 

이 내 프로젝트 구조입니다 :

내가 라즈베리에 얻을 오류입니다

src-> 
---- CMakeLists.txt 
---- main.c 
---- librerie-> 
-------------- CMakeLists.txt 
-------------- cJSON.c 
-------------- cJSON.h 
-------------- config.c 
-------------- config.h 
-------------- server_web.c 
-------------- server_web.h 
-------------- funzioni_thread.c 
-------------- funzioni_thread.h 
---- cmake-> 
-------------- FindGLIB.cmake 
-------------- FindMHD.cmake 

이 먼저 CMakeLists입니다 디렉토리 :

find_package(GLIB REQUIRED) 
find_package(MHD REQUIRED) 
include_directories (${GLib_INCLUDE_DIRS} ${EXTRA_LIBS}) 

add_library (librerie cJSON.c config.c generic.c server_web.c funzioni_thread.c) 
target_link_libraries (librerie ${GLib_LIBRARY} ${MHD_LIBRARY}) 

내가 뭘 잘못하고 있니?

답변

1

당신은 두 번

find_package(GLIB REQUIRED) 

처음이이 최상위 CMakeLists.txt에서 호출 및 glib-2.0 대상을 정의합니다 호출합니다. 두 번째로 librerie/CMakeLists.txt에서 호출되어 glib-2.0을 다시 만들려고합니다. 그래서 그 오류 메시지가 나타납니다 : 대상이 이미이 범위에 정의되어 있습니다.

add_subdirectory (librerie) 

find_package(GLIB REQUIRED) 
find_package(MHD REQUIRED) 

때문에 IMPORTED 대상 로컬 가시성 glib-2.0 대상 find_package(GLIB) 의해 정의되었다 :

가능한 해결 방법은 제 라이브러리 디렉토리에 단계, 오직 다음 최상위 find_package() 전화 CMakeLists.txt 인 하위 디렉토리 에서 호출 librerie/이 하위 디렉토리에서 돌아온 후에는 표시되지 않습니다. 따라서 최상위 디렉토리에서 두 번째 호출이 성공합니다.

+0

대단히 감사합니다! 그게 문제 였어, 지금은 효과가있다! 내가 이해하지 못하는 이유는 내 랩톱에서의 잘못된 길조차도 조용하게 작동하는 이유입니다. – Mex

+0

아마 랩톱에 가져온 대상 대신 변수를 정의하는 'FindGLIB.cmake' 스크립트가 다릅니다. 목표와 달리 변수의 재정의는 CMake의 오류가 아닙니다. – Tsyvarev

+0

FindGLIB.cmake 스크립트는 라즈베리와 랩톱에서 동일합니다. 모든 프로젝트 파일을 복사했는데 팔에서는 다르게 작업합니까?, boh, 어쨌든, 다시 한 번 감사드립니다! – Mex

관련 문제