У меня есть простой проект 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)
Вы не можете создать библиотеку из одного заголовочного файла:
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")
Других решений пока нет …