C Make로 C 수학 라이브러리에 링크하는 방법은 무엇입니까?
어떻게 추가합니까?math
내 Cmake 파일의 라이브러리?이 게시물은 타겟 링크 라이브러리를 추가하는 것을 언급하고 있지만, 저는 C에 대해 잘 모릅니다.추가 게시물 - 누군가 예시를 보여줄 수 있습니까?C를 사용하는 설명서를 받고 있습니다.undefined reference to 'pow'
수학 헤더의 pow 방법으로.
cmake_minimum_required(VERSION 3.3)
project(CSCI-E-28-Unix-Linux-Systems-Programming)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES
CMakeLists.txt
getchar.c
main.cpp
hw0
more01.c)
#target_link_libraries(<math.h> m)
add_executable(main main.cpp)
add_executable(getchar getchar.c)
add_executable(more01 more01.c)
add_executable(argu print_all_arguments.c)
add_executable(chars chars.c)
add_executable(ch4 ch4.c)
많은 수학적 함수(pow
,sqrt
,fabs
,log
등)이 선언됩니다.math.h
라이브러리를 연결해야 합니다.와는 달리libc
자동으로 연결되어 있습니다.libm
는 별도의 라이브러리이며 종종 명시적인 연결이 필요합니다.링커는 모든 라이브러리가 다음으로 시작한다고 가정합니다. 링크하기 위해libm
에 링크합니다.m
.
이렇게 써야 돼요.target_link_libraries(ch4 m)
연결libm
당신의 목표를 향해.첫 번째 인수는 대상이어야 합니다.따라서 다음 이후에 사용해야 합니다.add_executable(ch4 ch4.c)
예:
add_executable(ch4 ch4.c)
target_link_libraries(ch4 m)
다양한 대상의 경우 라이브러리를 추가해야 하는지 여부와 라이브러리의 이름이 어디에 있는지 테스트하는 것이 좋습니다.한 가지 방법이 있습니다.
:
include(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(m sin "" HAVE_LIB_M)
if (HAVE_LIB_M)
set(EXTRA_LIBS ${EXTRA_LIBS} m)
endif (HAVE_LIB_M)
:
//More tests & build-up of ${EXTRA_LIBS}
:
add_executable(ch4 ch4.c)
target_link_libraries(ch4 PUBLIC ${EXTRA_LIBS})
대상의 경우libm
의 일부입니다.libc
위의 테스트는 실패해야 합니다. 즉,${EXTRA_LIBS}
그리울 것이고,target_link
추가하지 않습니다.
저는 솔직히 이런 종류의 질문이 여전히 모던 씨메이크에 대한 적절한 답을 가지고 있지 않다는 것에 조금 놀랐습니다.요즘 권장되는(그리고 휴대용) 접근 방식은 다음과 같습니다.
find_library(MATH_LIBRARY m)
if(MATH_LIBRARY)
target_link_libraries(MyTarget PUBLIC ${MATH_LIBRARY})
endif()
언급URL : https://stackoverflow.com/questions/34625627/how-to-link-to-the-c-math-library-with-cmake
'programing' 카테고리의 다른 글
WebAPI에서 POST 데이터를 가져오는 방법은 무엇입니까? (0) | 2023.06.11 |
---|---|
data.frame의 각 행을 반복합니다. 열에 지정된 횟수 (0) | 2023.06.11 |
Excel 매크로 - 데이터와 형식을 표로 사용하는 모든 셀 선택 (0) | 2023.06.11 |
Android에서 SQLite를 사용할 때 동시성 문제를 방지하려면 어떻게 해야 합니까? (0) | 2023.06.11 |
Visual Studio ASP.Net MVC 실행 취소를 시작 페이지 작업으로 설정 (0) | 2023.06.11 |