Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake+;Qt创建者:将头文件添加到项目文件_C++_Cmake_Include_Qt Creator_Project Files - Fatal编程技术网

C++ CMake+;Qt创建者:将头文件添加到项目文件

C++ CMake+;Qt创建者:将头文件添加到项目文件,c++,cmake,include,qt-creator,project-files,C++,Cmake,Include,Qt Creator,Project Files,如果我在目录src中有.h和.cpp文件,.cpp文件包括.h文件,请在CMake中使用以下命令: aux_source_directory(src SRC_LIST) add_executable(${PROJECT_NAME} ${SRC_LIST}) 然后在Qt Creator中打开该CMake文件,获取项目文件列表(默认情况下左侧的文件树)中的所有文件(源+头) 另一方面,如果我将所有.h文件放在目录include中,并使用以下命令: include_directories(inclu

如果我在目录
src
中有
.h
.cpp
文件,
.cpp
文件包括
.h
文件,请在CMake中使用以下命令:

aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
然后在Qt Creator中打开该CMake文件,获取项目文件列表(默认情况下左侧的文件树)中的所有文件(源+头)

另一方面,如果我将所有
.h
文件放在目录
include
中,并使用以下命令:

include_directories(include)
aux_source_directory(src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
头文件从项目文件中消失


如何将头文件保存在该目录中,并且仍然将它们列在Qt Creator的项目文件中?

您不应该在任务中使用
aux\u source\u directory()
。这个命令是用于不同的东西。只需列出源文件(或将其放入变量中)

您不应该再使用
include\u directory()
来定义include目录。此命令将只填充编译器的
-I
标志。使用头文件定义一个变量,并将其添加到可执行文件中

如果不想手动列出每个文件,请使用
文件(GLOB…
。但是请注意,使用该命令时,网络上经常提到的警告

然后,告诉CMake仅为该可执行文件填充
-I
标志,并使用
包含
目录。这样,其他目标就不会被包含物污染,他们不应该使用

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)

我总是显式地添加头文件以避免任何意外。 但在使用QtCreator 4.2.0和cmake 3.7.1的MacOS上,我无法重现您的问题

不过,我建议使用以下结构来了解项目中有哪些文件,并在更新CMakeLists.txt期间触发cmake数据的更新

在project/CMakeLists.txt中:

add_subdirectory(src)
include_directory(include)
add_executable(foo ${SRC_LIST})
set(SRC_LIST
    ${SRC_LIST}
    ${CMAKE_CURRENT_SOURCE_DIR}/a.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/b.cpp
    PARENT_SCOPE
)
在project/src/CMakeLists.txt中:

add_subdirectory(src)
include_directory(include)
add_executable(foo ${SRC_LIST})
set(SRC_LIST
    ${SRC_LIST}
    ${CMAKE_CURRENT_SOURCE_DIR}/a.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/b.cpp
    PARENT_SCOPE
)

${SOURCES}
vs
${SRC_LIST}
将不起作用。这是两个不同的变量。@Torbjörn:谢谢。我修好了。