c++ - QtCreator Build/Clean 究竟是做什么的?

标签 c++ cmake qt-creator

我正在使用带有 CMake 的 QtCreator。在我的 CMakeLists.txt 文件中,我使用 GLOB_RECURSE QOBJECT_SOURCES "*.cpp",只是为了避免在添加新源时编辑文件。那个时候 CMake 当然不会改变它应该编译的可用文件的想法。我希望如果我使用 Build/Clean,它会清理缓存,并且当我重新编译项目时,会找到我的新源文件。然而,QtCreator 忽略了新添加的文件。我需要手动清理构建目录,然后运行 ​​cmake ..;制作。那么,Build/Clean 到底做了什么,与 Build/Rebuild 有什么区别? QtCreator 中有什么东西可以让编译器知道我的新文件吗?

最佳答案

当按下“Build > Clear CMake Configuration”时,Build 目录中的文件 CMakeCache.txt 和目录 CMakeFiles 被删除:

https://github.com/qtproject/qt-creator/blob/master/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp

    m_clearCMakeCacheAction [...] "Clear CMake Configuration"
    [...]
    connect(m_clearCMakeCacheAction [...] clearCMakeCache(SessionManager::startupProject());

https://github.com/qtproject/qt-creator/blob/master/src/plugins/cmakeprojectmanager/builddirmanager.cpp

void BuildDirManager::clearCache()
{
    auto cmakeCache = Utils::FileName(workDirectory()).appendPath(QLatin1String("CMakeCache.txt"));
    auto cmakeFiles = Utils::FileName(workDirectory()).appendPath(QLatin1String("CMakeFiles"));

    const bool mustCleanUp = cmakeCache.exists() || cmakeFiles.exists();
    if (!mustCleanUp)
        return;

    Utils::FileUtils::removeRecursively(cmakeCache);
    Utils::FileUtils::removeRecursively(cmakeFiles);

    forceReparse();
}


您使用的是什么版本的 QtCreator 和 CMake?

我怀疑您描述的行为是 QtCreator 4.1 之前的行为(或者至少我记得在我跳到 4.1 版之前发生过类似的事情,可在 QtCreator snapshots 获得)。

以防万一,您应该尝试最新版本,看看是否能解决您的问题,因为我使用的是 QtCreator 4.2 和 CMake 3.7(以及之前的 QtCreator 4.1 和 Cmake 3.5),但我没有看到您描述的内容。

我像你一样设置文件(尽管 CMake 开发人员不推荐它)。我的意思是,在 CMakeList.txt 中,我主要添加一个 GLOB(如果我想递归扫描指定目录,则添加 GLOB_RECURSE)。

这样,在这些目录中创建一个新文件后,在 Qt Creator 中只需要按下“Build > Run CMake”,或者在编辑器中修改 CMakeList.txt 使用空格加 CTRL+S(如果一个已在“选项 > 构建和运行 > CMake”中激活“自动运行 CMake”)。这两个操作都会使用新文件更新列出的文件树,为构建和运行 (CTRL+R) 做好准备。

从我的拙见来看,我认为当一个人在新项目中不断创建和重命名文件时,这是一种更舒适的方式(在我的例子中,我添加了 *.h* .hpp 也可以看到项目中列出的那些文件)。

关于c++ - QtCreator Build/Clean 究竟是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41185293/

相关文章:

c - 使用 CMake 时如何阻止 .exe 消失

c++ - to_string 未在范围内声明

c++ - 我应该在 Qt Creator 中更改什么以使用 MinGW 而不是 Microsoft 编译器进行编译

c++ - 控制台中的 OutputDebugString()

c++ - 如何理解 C++ 函数中的返回引用?

c++ - 随机存储器地址设置值

qt4 - cmake 中的 ${QT_LIBRARIES}

C++ 在 Windows 中播放音频

linux - 在 AWS Linux 中为 mosquitto MQTT 安装/链接 libwebsockets 库

c++ - 如何更改 Qt Creator 构建工具?