2016-07-06 67 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目標。第二次從librerie/CMakeLists.txt調用並嘗試再次創建glib-2.0。這就是爲什麼你看到這個錯誤信息:目標已經在這個範圍內定義了。

可能的解決方法是將步入庫子目錄第一,然後纔打電話find_package()在頂級的CMakeLists.txt

add_subdirectory (librerie) 

find_package(GLIB REQUIRED) 
find_package(MHD REQUIRED) 

因爲IMPORTED目標具有本地知名度,glib-2.0目標由find_package(GLIB)定義來自子目錄librerie/的呼叫在從此子目錄返回後將不可見。所以第二個來自頂級目錄的調用將會成功。

+0

非常感謝!這是問題,現在它的工作!我不明白的是爲什麼即使在我的筆記本電腦上錯誤的方式運行安靜 – Mex

+0

也許,您的筆記本電腦有不同的'FindGLIB.cmake'腳本,它不會定義導入的目標,而是變量。與目標不同,重新定義變量不是CMake的錯誤。 – Tsyvarev

+0

FindGLIB.cmake腳本與樹莓和筆記本電腦相同,我複製了所有的項目文件,也許在手臂上做了不同的事情?,boh,無論如何,再次感謝! – Mex