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:谢谢。我修好了。