我在CMake中使用QtCreator。在我使用的CMakeLists.txt文件中GLOB_RECURSE QOBJECT_SOURCES "*.cpp"
,只是为了避免在添加新源时编辑文件。那个时候CMake当然不会改变它应该编译的可用文件的主意。我希望如果使用“构建/清理”,它将清理缓存,当我重新编译项目时,将找到新的源文件。但是,QtCreator忽略了新添加的文件。我需要手动清理构建目录,然后运行cmake ..; make
。那么,Build / Clean到底能做什么?与Build / Rebuild有什么区别?QtCreator中有什么东西,我可以使编译器知道我的新文件吗?
一按“构建>清除CMake配置”时,将删除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之前的(或者至少我还记得类似的事情发生在我跳到QtCreator快照的4.1版之前)。
以防万一,您应该尝试最新的方法,看看是否能解决您的问题,因为我使用的是QtCreator 4.2和CMake 3.7(以及以前的QtCreator 4.1和Cmake 3.5),但是我看不到您的描述。
我像您一样设置文件(尽管CMake开发人员不建议这样做)。我的意思是,我主要在CMakeList.txt中添加一个GLOB
(或者GLOB_RECURSE
如果我想递归扫描指向的目录)。
这样,在这些目录中创建一个新文件后,只需在Qt Creator中按“ Build> Run CMake”,或在编辑器中用空格加CTRL + S修改CMakeList.txt(如果已激活“在“选项>生成并运行> CMake”中选择“自动运行CMake”)。这两个操作都会使用新文件更新列出的文件树,以准备进行构建和运行(CTRL + R)。
从我的卑鄙角度来看,我认为这是一种在一个新项目中不断创建和重命名文件的更舒适的方式(在我的情况下,我也添加*.h
并*.hpp
能够看到项目中列出的那些文件)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句