programing

C++에서 CMake가 링커 언어를 판별할 수 없음

prostudy 2022. 6. 30. 22:45
반응형

C++에서 CMake가 링커 언어를 판별할 수 없음

Visual Studio 2010과 Cygwin을 모두 사용하여 Windows 7 x 64에서 cmake hello 월드 프로그램을 실행하려고 하는데 둘 다 작동하지 않는 것 같습니다.내 디렉토리 구조는 다음과 같습니다.

HelloWorld
-- CMakeLists.txt
-- src/
-- -- CMakeLists.txt
-- -- main.cpp
-- build/

나는 한다.cd build그 뒤에 a가 붙는다.cmake ..라고 하는 에러가 표시됩니다.

CMake Error: CMake can not determine linker language for target:helloworld
CMake Error: Cannot determine link language for target "helloworld".

단, main.cpp의 확장자를 main.c로 변경했을 경우 파일 시스템과 파일 시스템 모두에서src/CMakeLists.txt모든 것이 예상대로 작동합니다.이는 Visual Studio 명령 프롬프트(Visual Studio Solution Generator)와 Cygwin 터미널(Unix Makefiles Generator) 모두에서 실행되는 경우입니다.

이 코드가 왜 작동하지 않는지 아십니까?

CMake Lists(CMake 리스트)txt

PROJECT(HelloWorld C)
cmake_minimum_required(VERSION 2.8)

# include the cmake modules directory
set(CMAKE_MODULE_PATH ${HelloWorld_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})

add_subdirectory(src)

src/CMake Lists.txt

# Include the directory itself as a path to include directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Create a variable called helloworld_SOURCES containing all .cpp files:
set(HelloWorld_SOURCES main.cpp)

# Create an executable file called helloworld from sources:
add_executable(hello ${HelloWorld_SOURCES })

src/main.cpp

int main()
{
  return 0;
}

말씀하신 오류도 있습니다.

CMake Error: CMake can not determine linker language for target:helloworld
CMake Error: Cannot determine link language for target "helloworld".

제 경우, 이것은 C++ 파일을 가지고 있는 것이 원인입니다..cc내선 번호

CMake 가 코드의 언어를 올바르게 판별할 수 없는 경우는, 다음을 사용할 수 있습니다.

set_target_properties(hello PROPERTIES LINKER_LANGUAGE CXX)

언어 추가를 제안하는 승인된 답변project()스테이트먼트는 (설명서에 따르면) 사용되는 언어에 대한 보다 엄격한 체크만 추가할 뿐이지만, 나에게는 도움이 되지 않았습니다.

선택적으로 프로젝트에서 지원하는 언어를 지정할 수 있습니다.예를 들어 CXX(C++), C, Fortran 등이 있습니다.디폴트로는 C와 CXX가 네이블로 되어 있습니다.예를 들어 C++ 컴파일러가 없는 경우 지원하는 언어를 명시적으로 나열하여 체크 기능을 비활성화할 수 있습니다. 예를 들어, C. 특수 언어 "NONE"을 사용하면 모든 언어에 대한 체크 기능을 비활성화할 수 있습니다.CMAKE_PROJECT__라는 변수가 존재하는 경우INCLUDE_FILE. 이 변수가 가리키는 파일은 프로젝트 명령의 마지막 단계로 포함됩니다.

제 경우, 타겟에 소스 파일이 없었기 때문입니다.내 모든 코드는 헤더 파일에 소스 코드가 있는 템플릿이었다.빈 file.cpp를 추가하면 문제가 해결된다.

변경해 보다

PROJECT(HelloWorld C)

안으로

PROJECT(HelloWorld C CXX)

아니면 그냥

PROJECT(HelloWorld)

참조: http://www.cmake.org/cmake/help/v2.8.8/cmake.html#command:project

소스 파일이 없는 라이브러리가 구축될 경우에 대비하여 다른 솔루션을 추가하고 싶습니다.이러한 라이브러리는 헤더 전용 라이브러리라고도 합니다.디폴트add_library는 적어도1개의 소스 파일이 추가될 것으로 예상합니다.그렇지 않으면 전술한 에러가 발생합니다.헤더만 라이브러리가 매우 일반적이기 때문에 cmake는INTERFACE이치노INTERFACE키워드는 다음과 같이 사용되며 라이브러리에 빈 소스 파일을 추가할 필요가 없습니다.

add_library(myLibrary INTERFACE)
target_include_directories(myLibrary INTERFACE {CMAKE_CURRENT_SOURCE_DIR})

CMakeLists 의와a와와와와와와와ttttttttttttttttttttttttttt tttttt tttttt.를 바꿉니다. 치환{CMAKE_CURRENT_SOURCE_DIR}txt 파 t 。

헤더 전용 라이브러리 및 cmake에 대한 자세한 내용은 이 블로그 게시물 또는 cmake 설명서를 참조하십시오.

이 오류는 프로젝트에 포함된 cpp 파일이 존재하지 않는 경우에도 발생합니다.

CMake Lists에 소스 파일을 나열하는 경우.txt 를 눌러 파일 이름을 잘못 입력하면 이 오류가 나타납니다.

OP와 다소 관련이 없는 답변이지만, 나 같은 사람은 약간 비슷한 문제를 가지고 있다.

사용 예: Ubuntu (C, Clion, 자동 완성) :

나도 같은 실수를 했어

CMake 오류: 대상 "hello"의 링크 언어를 확인할 수 없습니다.

set_target_properties(hello PROPERTIES LINKER_LANGUAGE C)도움말은 이 문제를 해결하지만 헤더가 프로젝트에 포함되지 않아 자동 완성이 작동하지 않습니다.

이게 내가 먹었던 거야

cmake_minimum_required(VERSION 3.5)

project(hello)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES ./)

add_executable(hello ${SOURCE_FILES})

set_target_properties(hello PROPERTIES LINKER_LANGUAGE C)

되고 도 '오류'로 됩니다.소스로서 1개의 파일을 포함하면 자동 완성도 얻을 수 있을 뿐만 아니라 링커도움이 됩니다.C.

cmake_minimum_required(VERSION 3.5)

project(hello)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES ./1_helloworld.c)

add_executable(hello ${SOURCE_FILES})

소스 파일의 경로를 확인하기만 하면 됩니다.(각 CPP에)

C 기반 코드를 컴파일할 때도 비슷한 오류가 발생했습니다. 내 했습니다.cmake 되어 있는 각 파일 해 주세요. 에서 언급된 각 소스 파일의 소스 파일 경로를 확인하십시오.cmake일입입다 이이이이이 이이것것될

나는 내 문제를 해결했다, 변화해서

add_executable(file1.cpp)

로.

add_executable(ProjectName file1.cpp)

기본적으로는 JNI Native 폴더 이름은 jni 입니다.이름을 cpp로 바꾸면 문제가 해결된다.

언급URL : https://stackoverflow.com/questions/11801186/cmake-unable-to-determine-linker-language-with-c

반응형