2017-02-21 15 views
1
을 프로젝트에 헤더 파일을 추가

나는 .cpp 파일이 .h 파일을 포함하는 디렉토리 src.h.cpp 파일, CMake에서 이러한 명령을 사용하는 경우 :CMake + Qt는 창조주 : 파일

aux_source_directory(src SRC_LIST) 
add_executable(${PROJECT_NAME} ${SRC_LIST}) 

그리고 개방 Qt Creator의 CMake 파일은 프로젝트 파일 목록 (기본적으로 왼쪽의 파일 트리)에서 모든 파일 (소스 + 헤더)을 가져옵니다. 이제

, 다른 한편으로는, 내가 디렉토리 include의 모든 .h 파일을 넣어 경우이를 사용

include_directories(include) 
aux_source_directory(src SRC_LIST) 
add_executable(${PROJECT_NAME} ${SRC_LIST}) 

파일이 프로젝트 파일에서 사라 헤더를!

헤더 파일을 해당 디렉토리에 보관하고 Qt Creator의 프로젝트 파일에 나열하려면 어떻게합니까?

답변

0

놀랍지 않게 내 헤더 파일을 항상 명시 적으로 추가합니다. QtCreator 4.2.0 및 cmake 3.7.1을 사용하는 MacOS에서 문제를 재현 할 수 없습니다.

그러나 CMakeLists.txt를 업데이트하는 동안 어떤 파일이 프로젝트 내에 있는지와 cmake의 데이터 업데이트를 트리거하려면 다음 구조를 사용하는 것이 좋습니다. 프로젝트/CMakeLists.txt에서

:

프로젝트에서
add_subdirectory(src) 
include_directory(include) 
add_executable(foo ${SRC_LIST}) 

/SRC/CMakeLists.txt :

set(SRC_LIST 
    ${SRC_LIST} 
    ${CMAKE_CURRENT_SOURCE_DIR}/a.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/b.cpp 
    PARENT_SCOPE 
) 
+1

'$ {출처}'$ {SRC_LIST}'대'작동하지 않습니다. 그것들은 두 개의 다른 변수입니다. –

+0

@ Torbjörn : 감사합니다. 나는 고쳤다. –

2

작업에 aux_source_directory()을 사용하면 안됩니다. 그 명령은 다른 것입니다. 소스 파일을 나열하거나 변수에 넣으십시오.

더 이상 포함 디렉토리를 정의하는 데 include_directory()을 사용하면 안됩니다. 이 명령은 컴파일러의 -I 플래그를 채 웁니다. 헤더 파일로 변수를 정의하고이를 실행 파일에 추가하십시오.

모든 파일을 수동으로 나열하지 않으려면 file(GLOB ...)을 사용하십시오. 그러나 그 명령을 사용하여 웹에서 자주 언급되는주의 사항을 알고 있어야합니다.

그런 다음 include 디렉터리를 사용하여 실행 파일에 대해서만 -I 플래그를 채우라고 CMake에게 알립니다. 그렇게하면 다른 타겟이 포함 된 것으로 오염되지 않고 사용할 수 없습니다.

set(SOURCES 
    src/main.cpp 
    src/whatever.cpp) 
set(HEADERS 
    include/whatever.h) 
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS}) 
target_include_directories(${PROJECT_NAME} PUBLIC include)