我在Qake中使用QtCreator。在我的CMakeLists.txt文件中,我使用<runtime>
<assemblyBinding configSource="runtime.config" />
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
,以避免在添加新源时编辑文件。那个时候当然CMake并没有改变它应该编译的可用文件。我希望如果我使用Build / Clean,它将清理缓存,当我重新编译项目时,我的新源文件将被找到。但是,QtCreator忽略了新添加的文件。我需要手动清理构建目录,然后运行GLOB_RECURSE QOBJECT_SOURCES "*.cpp"
。那么,Build / Clean究竟是什么产生的,与Build / Rebuild相比有什么区别? QtCreator中有什么东西,我可以让编译器知道我的新文件吗?
答案 0 :(得分:0)
这就是CMake file(GLOB ...)
的问题:它仅在运行CMake时进行评估,而不是在make运行时进行评估。
QtCreator的Build取决于make检测更改的能力,并在检测到CMakeLists.txt文件的更改时调用CMake。
最强大且推荐的方法是手动明确命名和列出所有源文件和头文件。
答案 1 :(得分:0)
当一次推动&#34;构建&gt;清除CMake配置&#34;,删除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中只需按下&#34; Build&gt;运行CMake&#34;,或者在编辑器中使用空格加CTRL + S修改CMakeList.txt(如果已经激活了&#39;自动运行CMake&#39; at&#34;选项&gt; Build&amp; Run&gt; CMake的&#34)。这两个操作都使用新文件更新列出的文件树,准备进行构建和运行(CTRL + R)。
从我不起眼的角度来看,我认为在新项目中不断创建和重命名文件时,这是一种更舒适的方式(在我的情况下,我添加*.h
和*.hpp
另外,为了能够看到项目中列出的那些文件。