CMake Ошибка try_compile pthreads типа исполняемого файла

-- Looking for include file pthread.h
-- Looking for include file pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads CMake Error at /usr/share/cmake/Modules/CheckLibraryExists.cmake:41 (try_compile):   Only libraries may be used as try_compile IMPORTED LINK_LIBRARIES.  Got   pthreads of type EXECUTABLE. Call Stack (most recent call first):   /usr/share/cmake/Modules/FindThreads.cmake:58 (CHECK_LIBRARY_EXISTS)   tests/app_suite/CMakeLists.txt:58 (find_package)


-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE

Я на Fedora 18 64-битной.

find_package(Threads REQUIRED)
target_link_libraries(app_suite_tests ${CMAKE_THREAD_LIBS_INIT})

это код, который создает это. Что я могу сделать, чтобы CMake не выдавал здесь ошибку, или как я могу заставить CMake проверить библиотеку pthreads поверх исполняемого файла?

Благодарю.

Дополнительная информация:

if(NOT CMAKE_HAVE_THREADS_LIBRARY)
    # Do we have -lpthreads
    CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE)
    if(CMAKE_HAVE_PTHREADS_CREATE)
      set(CMAKE_THREAD_LIBS_INIT "-lpthreads")
      set(CMAKE_HAVE_THREADS_LIBRARY 1)
      set(Threads_FOUND TRUE)
    endif()

Это из FindThreads.cmake, и ошибка выдается на CHECK_LIBRARY_EXISTS

2 ответа

Решение

Эта ошибка характерна для cmake 2.8.11+ и проекта, в котором есть исполняемая цель с именем "pthreads". Это исполняемый файл, который отключает cmake. Переименование исполняемого файла решает проблему. Смотрите также запись трекера Dr. Memory на эту тему.

Я думаю, что вы ищете

ADD_EXECUTABLE(your_executable ${source_files})

TARGET_LINK_LIBRARIES(
pthread
)

взято из cmake и libpthread

Другие вопросы по тегам