我使用Qt的方式是,与Qt相关的文件在一个名为“GUI"的单独文件夹中,我使用的是CMake,它的相关部分如下所示:
include_directories(${Qt5Widgets_INCLUDES} GUI/include main/include)
add_definitions(${Qt5Widgets_DEFINITIONS})
file(GLOB_RECURSE QOBJECT_HEADERS
"GUI/include/*.h"
)
file(GLOB_RECURSE QOBJECT_SOURCES
"GUI/*.cpp"
)
QT5_WRAP_CPP(hdr_moc ${QOBJECT_HEADERS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS} -std=c++11 -Wall")
add_executable(simGUI main/sim_GUI.cpp ${QOBJECT_SOURCES}
${hdr_moc})
# Use the Widgets module from Qt 5.
target_link_libraries(simGUI Qt5::Widgets)
字符串
基本上,这个设置可以工作,但是当我添加一个新文件(类似于自定义小部件)时,新文件编译正常,但是在链接阶段找不到新对象。
我过去常常删除构建文件,之后一切都很好。
我是不是CMake出了什么问题?我猜这些症状是由缓存问题引起的。
1条答案
按热度按时间syqv5f0l1#
CMake的文档:
我们不建议使用
GLOB
从源代码树中收集源代码文件列表。如果在添加或删除源代码时没有CMakeLists.txt文件更改,则生成的构建系统无法知道何时要求CMake重新生成。典型的方法是手动列出所有文件。