programing

헤더 전용 프로젝트를 생성하도록 CMake를 설정하려면 어떻게 해야 합니까?

bestprogram 2023. 9. 24. 13:01

헤더 전용 프로젝트를 생성하도록 CMake를 설정하려면 어떻게 해야 합니까?

헤더 전용 C++(또는 C) 라이브러리 프로젝트를 설정하고 싶은데 방법을 찾을 수 없습니다.

몇 번의 검색 끝에 다음을 사용하여 일반 라이브러리를 설정할 수 없음을 알게 되었습니다.add_library컴파일 가능한 소스 파일이 필요하기 때문입니다.이 방법은 다음과 같은 방법을 사용하는 것일 것입니다.add_custom_target대신 다음과 같은 방식으로:

# Get all headers (using search instead of explicit filenames for the example)
file( GLOB_RECURSE XSD_HEADERS 
    *.hxx
)
add_custom_target( libsxsd SOURCES ${XSD_HEADERS} )

그러나 VS2010에서 생성된 프로젝트의 소스를 볼 수 없기 때문에 여기서는 이 작업이 완전히 작동하지 않는 것 같습니다.버그인지, 제가 잘못하고 있는지, 선호하는 방법이 있는지 모르겠습니다.

업데이트: CMake는 헤더 전용 프로젝트에 이상적인 INTERFORE라는 라이브러리 대상을 곧 포함할 예정입니다.이 기능은 현재 마스터 분기에 있습니다.참고.

명령어 사용add_custom_target당신이 나를 위한 작품을 제안하는 것처럼(VS2010).파일은 프로젝트 내에 깔끔하게 나열되어 있지만 사용자 지정 대상으로 "추가 포함 디렉토리"를 정의할 수 없다는 단점이 있습니다.대신, 이제 다음을 사용합니다.

add_library(HEADER_ONLY_TARGET STATIC test1.hpp test2.hpp)
set_target_properties(HEADER_ONLY_TARGET PROPERTIES LINKER_LANGUAGE CXX)

그러면 헤더 전용 프로젝트가 더미 보관 대상으로 설정됩니다.걱정하지 마십시오. 구축을 시도하면 실제 바이너리가 생성되지 않습니다(적어도 VS2010 및 Xcode 4에서는 그렇지 않습니다).명령어set_target_propertiesCmake는 그렇지 않으면 .hpp 파일에서만 대상 언어를 유추할 수 없다고 불평할 것이기 때문입니다.

작업은 최근 인터페이스 라이브러리 기능을 사용하여 수행할 수 있습니다.

add_library(mylib INTERFACE)
target_include_directories(mylib INTERFACE my_include_dir1 my_include_dir2)

그러면 소스 파일이 없는 라이브러리 대상이 생성되고 대상의 INTERIFIC_INCUDE_DIRECTORIES 속성에 include 디렉토리가 추가됩니다.이 라이브러리에 연결된 대상은 이 디렉토리를 포함 경로(-I) 제작 시.

예를 들어 실행 가능한 대상과 함께 라이브러리를 사용하려면 다음 작업만 수행합니다.

add_executable(myexec ${MY_SOURCES})
target_link_libraries(myexec mylib)

당신이 찾고 있는 것은 단지 cmake에 대해 "include_directories" 명령을 사용하여 include 디렉토리를 추가하는 것이라고 생각합니다.

이 작업을 수행할 때 제어할 수 없는 타사 도구라면 "SYSTEM" 플래그도 추가하겠습니다.

그래서 명령어는 다음과 같습니다.

include_directories(SYSTEM ${GTEST_INCLUDE_DIRS})

언급URL : https://stackoverflow.com/questions/5957134/how-do-i-set-up-cmake-to-generate-header-only-projects