C++ FindThreads仅在启用C或CXX语言的情况下工作

C++ FindThreads仅在启用C或CXX语言的情况下工作,c++,cmake,toolchain,C++,Cmake,Toolchain,我正在尝试构建一个可移植的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(COMP

我正在尝试构建一个可移植的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)
在我的主机上,它工作得很好,我可以毫无问题地编译,但是当我在另一台机器上移动工具链文件时,我遇到了问题。如果我尝试在我的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.
这是我的cmakfiles/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)
放置

之后

project(HelloWorld C CXX)
这是错误消息告诉我们的:调用
project()
可以启用语言,因此找到线程将成功



通常,所有的
查找包
调用都应该在
项目()之后进行。

这将有助于解释为什么要进行否决,以改进问题。如果你发布一个需要的文件来重现你的问题,那将非常有帮助。不可能发布那个。。。我不能要求建立一个工具链来测试它。。。我希望其他人也有同样的问题“不可能发布那个…”那么你对这个地方感到厌倦了,对不起。我希望我不是唯一一个有这个问题的人。。。如果我能找到一个解决方案,这对其他人会很有用
project(HelloWorld C CXX)