Ошибка cmake os x Нет конкретных членов архива

У меня есть простой проект cmake, который я не могу собрать на OS X 10.8.4. Процесс cmake / make отлично работает в Linux, но в OS X я получаю эту ошибку:

Linking CXX static library libImageFilter.a
ar: no archive members specified
...
make[2]: *** [lib/libImageFilter.a] Error 1
make[1]: *** [lib/CMakeFiles/ImageFilter.dir/all] Error 2
make: *** [all] Error 2

Я использую генератор Eclipse CDT4 Unix MakeFile на обеих платформах. Это похоже на разницу между ar в двух системах. Но я не смог найти много на Google, чтобы помочь мне устранить неполадки.

Вот еще немного информации для вас

SRC / CMakeList.txt

make_minimum_required(VERSION 2.8)
project(itkNormals)
FIND_PACKAGE (ITK REQUIRED)
IF( ITK_FOUND )
include( ${ITK_USE_FILE} )
ENDIF( ITK_FOUND )
add_subdirectory(test)
add_subdirectory(lib)

ЦСИ / Библиотека / CMakeList.txt

add_library(DotImageFilter itkDotImageFilter.h)
SET_TARGET_PROPERTIES(DotImageFilter PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(DotImageFilter ${ITK_LIBRARIES})

add_library(ImageFilter itkImageFilter.hxx)
SET_TARGET_PROPERTIES(ImageFilter PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(ImageFilter ${ITK_LIBRARIES})

SRC / тест / CMakeLists.txt:

include_directories(${PROJECT_SOURCE_DIR}/lib)

add_executable(itkNormalsMain itkNormals.cxx)
TARGET_LINK_LIBRARIES(itkNormalsMain ${ITK_LIBRARIES})
TARGET_LINK_LIBRARIES(itkNormalsMain ImageFilter)
TARGET_LINK_LIBRARIES(itkNormalsMain DotImageFilter)

add_executable(dotTestMain dotTester.cxx)
TARGET_LINK_LIBRARIES(dotTestMain ${ITK_LIBRARIES})
TARGET_LINK_LIBRARIES(dotTestMain ImageFilter)
TARGET_LINK_LIBRARIES(dotTestMain DotImageFilter)

add_executable(IST ImageSourceTest.cxx)
TARGET_LINK_LIBRARIES(IST ${ITK_LIBRARIES})
TARGET_LINK_LIBRARIES(IST ImageFilter)

3

Решение

Вы не можете создать библиотеку из одного заголовочного файла:

add_library(ImageFilter itkImageFilter.hxx)
SET_TARGET_PROPERTIES(ImageFilter PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(ImageFilter ${ITK_LIBRARIES})

это причина, почему вы установили LINKER_LANGUAGE явно — есть ничего такого ссылка и cmake в замешательстве.

Так include_directories достаточно:

include_directories(${PROJECT_SOURCE_DIR}/lib)

КСТАТИ:

Вам не нужно проверять ITK_FOUND если вы укажете REQUIRED:

FIND_PACKAGE (ITK REQUIRED)
IF( ITK_FOUND )
include( ${ITK_USE_FILE} )
ENDIF( ITK_FOUND )

от документация:

The REQUIRED option stops processing with an error message if the package cannot be found.


PROJECT_SOURCE_DIR не обязательно равно itkNormals_SOURCE_DIR (вы можете использовать этот файл из другого проекта):

include_directories(${PROJECT_SOURCE_DIR}/lib)

Можно исправить одним из следующих способов:

include_directories(${itkNormals_SOURCE_DIR}/lib)
include_directories(${CMAKE_CURRENT_LIST_DIR}/../lib)

или просто включить из родительского файла:

# src/CMakeLists.txt
include_directories("./lib")
7

Другие решения

Других решений пока нет …