FindThreads работает, только если включен язык C или CXX - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь создать переносимый gcc, чтобы позволить другим компилировать, используя разные системы.

Я использовал crosstool-ng для кросс-компиляции gcc-8.2 для x86_64, я создал статическую цепочку инструментов.

Я создал следующий файл цепочки инструментов:

#set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
set(QAMF_ROOT "/opt/hyperserver-dev/x86_64-qamf")

set(COMPILER_ROOT "${QAMF_ROOT}")
set(COMPILER_PREFIX "x86_64-qamf-linux-gnu-")
set(C_COMPILER "gcc")
set(CXX_COMPILER "g++")

# specify the cross compile
set(CMAKE_C_COMPILER    ${COMPILER_ROOT}/bin/${COMPILER_PREFIX}${C_COMPILER} )
set(CMAKE_CXX_COMPILER  ${COMPILER_ROOT}/bin/${COMPILER_PREFIX}${CXX_COMPILER} )

# HyperServer sysroot path
set(HYPERSERVER_SYSROOT "${COMPILER_ROOT}/x86_64-qamf-linux-gnu/sysroot") 

# where is the target environment 
set(CMAKE_FIND_ROOT_PATH ${HYPERSERVER_SYSROOT} )

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

На моей хост-машине он прекрасно работает, и я могу без проблем скомпилировать, но когда я переместил файл цепочки инструментов на другую машину, у меня возникли проблемы,Если я пытаюсь включить Threads в мой cmake, у меня появляется следующая ошибка:

CMake Error at /usr/local/share/cmake-3.13/Modules/FindThreads.cmake:54 (message):
  FindThreads only works if either C or CXX language is enabled
Call Stack (most recent call first):
  CMakeLists.txt:2 (find_package)


-- Configuring incomplete, errors occurred!
make: *** No targets specified and no makefile found.  Stop.

Это мой CMakeFiles / txt

cmake_minimum_required(VERSION 3.9)
find_package(Threads REQUIRED)
project(HelloWorld C CXX)
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)

1 Ответ

0 голосов
/ 24 января 2019

Место

find_package(Threads REQUIRED)

после

project(HelloWorld C CXX)

Это сообщение об ошибке сообщает: вызов project() включает языки, поэтому поиск потоков будет успешным.


Обычно все find_package звонки должны поступать после project() одного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...