2016-07-06 6 views
0

私はcmakeで新しいです。 cmakeを使用して私のラップトップでプロジェクトをコンパイルできましたが、ラズベリーは機能していません。CMakeはラズベリーでコンパイルされません

これは私がラズベリーに乗るエラーです:これは私のプロジェクト構造である

-- 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です:

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ですディレクトリ:

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ターゲットを定義している呼び出します。 2回目はlibrerie/CMakeLists.txtから呼び出され、もう一度glib-2.0を作成しようとしました。そのため、このエラーメッセージが表示されます。ターゲットは、このスコープ内ですでに定義されています。

可能な回避策は、最初のライブラリサブディレクトリにステップ、およびのみ、トップレベルCMakeLists.txtfind_package()を呼び出すことである。

add_subdirectory (librerie) 

find_package(GLIB REQUIRED) 
find_package(MHD REQUIRED) 

IMPORTEDターゲットため、ローカル可視性、find_package(GLIB)によって定義glib-2.0ターゲットを有しますサブディレクトリからの呼び出しlibrerie/は、このサブディレクトリから戻った後は表示されません。したがって、トップレベルディレクトリからの2番目の呼び出しは成功します。

+0

ありがとうございます!それは問題だった、今それは動作します!私が理解していないのは、私のラップトップの間違った方法が静かに走っている理由です。 – Mex

+0

おそらく、あなたのラップトップには、インポートされたターゲットを定義するのではなく変数を別にした 'FindGLIB.cmake'スクリプトがあります。ターゲットとは異なり、変数の再定義はCMakeのエラーではありません。 – Tsyvarev

+0

FindGLIB.cmakeスクリプトは、ラズベリーとラップトップでは同じですが、私はすべてのプロジェクトファイルをコピーしました。多分アームが違うのですか?とにかく、ありがとう! – Mex

関連する問題