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