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
'programing' 카테고리의 다른 글
다른 유형에 함수 포인터 캐스팅 (0) | 2022.06.30 |
---|---|
버튼 클릭 시 Vue Transition이 트리거되지 않음 (0) | 2022.06.30 |
VueJ에서의 번호 포맷 방법s (0) | 2022.06.30 |
포인터가 일정하고 휘발성이 있다고 선언되었습니다. (0) | 2022.06.30 |
로드 시 Vue.js v-if 및 v-f를 포함하는 HTML 태그 (0) | 2022.06.29 |