Visual Studio 2010과 Cygwin을 모두 사용하여 Windows 7 x64에서 cmake hello world 프로그램을 실행하려고하는데 둘 다 작동하지 않는 것 같습니다. 내 디렉토리 구조는 다음과 같습니다.
HelloWorld
-- CMakeLists.txt
-- src/
-- -- CMakeLists.txt
-- -- main.cpp
-- build/
나는 cd build
다음을 수행하고 다음 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 솔루션 생성기) 및 Cygwin 터미널 (Unix Makefiles 생성기) 모두에서 실행되는 경우입니다.
이 코드가 작동하지 않는 이유를 아십니까?
CMakeLists.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 / CMakeLists.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;
}
답변
변경 시도
PROJECT(HelloWorld C)
으로
PROJECT(HelloWorld C CXX)
아니면 그냥
PROJECT(HelloWorld)
참조 : http://www.cmake.org/cmake/help/v2.8.8/cmake.html#command:project
답변
또한 언급 한 오류가 있습니다.
CMake Error: CMake can not determine linker language for target:helloworld
CMake Error: Cannot determine link language for target "helloworld".
제 경우에는 .cc
확장자 가있는 C ++ 파일이 있기 때문 입니다.
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를 추가하면 문제가 해결되었습니다.
답변
혼란 스러울 수 있지만 프로젝트에 포함 된 cpp 파일이없는 경우에도 오류가 발생합니다.
CMakeLists.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)
오류는 없지만 필요한 것은 아닙니다. 단일 파일을 소스로 포함하면 자동 완성을 얻을뿐만 아니라 링커를 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})
답변
또한 C 기반 코드를 컴파일하는 동안 비슷한 오류가 발생했습니다. 내 cmake
파일 의 소스 파일 경로를 수정하여 문제를 해결했습니다 . 파일에 언급 된 각 소스 파일의 소스 파일 경로를 확인 cmake
하십시오. 이것은 당신에게도 도움이 될 것입니다.
답변
기본적으로 JNI Native 폴더의 이름은 jni 입니다. cpp로 이름을 바꾸면 문제가 해결되었습니다.