尝试添加自定义规则以输出某些/path/to/XXXX.rule,该规则在windows上的qt5 cmake中已具有自定义规则

尝试添加自定义规则以输出某些/path/to/XXXX.rule,该规则在windows上的qt5 cmake中已具有自定义规则,cmake,qt5,ninja,Cmake,Qt5,Ninja,我正在将我的代码移植到windows上,windows是在Ubuntu上构建和运行的(Qt5.15.1中有cmake)。在我的项目中,我希望将我的主要源文件构建到库中,然后将其链接到可执行文件中(当我们在大型项目中合作时,这很有意义) 环境: Windows10 64位 Visual Studio 2019 Cmake 3.18.1 Qt 5.15.1 但是,cmake抱怨了一些错误: 在E:\test\build-test-Desktop\u Qt\u 15\u 1\u MSVC2019\u

我正在将我的代码移植到windows上,windows是在Ubuntu上构建和运行的(Qt5.15.1中有cmake)。在我的项目中,我希望将我的主要源文件构建到库中,然后将其链接到可执行文件中(当我们在大型项目中合作时,这很有意义)

环境:

Windows10 64位
Visual Studio 2019
Cmake 3.18.1
Qt 5.15.1
但是,cmake抱怨了一些错误:

在E:\test\build-test-Desktop\u Qt\u 15\u 1\u MSVC2019\u 64bit-Debug中运行D:\Qt\Tools\CMake\u 64\bin\CMake.exe-se:/test/test-be:/test/build-test-Desktop\u Qt\u 5\u 15\u 1\u MSVC2019\u 64bit-Debug。
--配置完成
--生成完成
--生成文件已写入:E:/test/Build-test-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug
运行时间:00:00。
在E:\test\build-test-Desktop\u Qt\u 5\u 15\u 1\u MSVC2019\u 64bit-Debug中运行D:\Qt\Tools\CMake\u 64\bin\CMake.exe-S E:/test/test-be:/test/build-test-Desktop\u Qt\u 5\u 15\u 1\u MSVC2019\u 64bit-Debug。
--配置完成
CMakeLists.txt中的CMake错误:
尝试将自定义规则添加到输出
E:/test/build-test-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug/test_autogen/timestamp.rule
它已经有一个自定义规则。
CMakeLists.txt中的CMake错误:
找不到源文件:
E:/test/build-test-Desktop\u Qt\u 5\u 15\u 1\u MSVC2019\u 64bit-Debug/cmakfiles/test\u autogen\u timestamp\u deps
尝试扩展。C++ c+c.cp.cxx .cm. m .m. hh.h++,hm。
.hpp.hxx.in.txx
CMakeLists.txt中的CMake错误:
找不到源文件:
E:/test/build-test-Desktop\u Qt\u 5\u 15\u 1\u MSVC2019\u 64bit-Debug/cmakfiles/test\u autogen
尝试扩展。C++ c+c.cp.cxx .cm. m .m. hh.h++,hm。
.hpp.hxx.in.txx
CMake错误:目标间依赖关系图包含以下强连接组件(循环):
静态库类型的“测试”
取决于“测试自动生成时间戳深度”(强)
取决于“测试自动生成”(强)
实用程序类型的“测试自动生成时间戳”
取决于“测试”(强)
实用程序类型的“测试自动生成”
取决于“测试自动生成时间戳深度”(强)
这些目标中至少有一个不是静态_库。仅在静态库之间允许循环依赖关系。
CMake生成步骤失败。无法正确重新生成生成文件。
CMake进程已退出,退出代码为1。
运行时间:00:00。
这里我注意到
时间戳
循环链接
问题,但它们不是我自己创建或需要的(可能它们是由qt自动生成的?)

要重现该问题,只需使用QtCreator创建一个名为Test的最小默认桌面应用程序,该程序由
cmake
构建。并使用以下
CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project( Test LANGUAGES CXX)
set( TEST_SDK test)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)

include_directories( ${Qt5Widgets_INCLUDE_DIRS} )

add_library(${TEST_SDK} mainwindow.cpp mainwindow.h mainwindow.ui)
target_link_libraries(${TEST_SDK} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

add_executable( ${PROJECT_NAME} main.cpp)
target_link_libraries( ${PROJECT_NAME} ${TEST_SDK})
到目前为止,在QtCreator中运行
Cmake
,将显示这些错误。总之,有两个主要错误:

尝试将自定义规则添加到输出
E:/test/build-test-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug/test_autogen/timestamp.rule
它已经有一个自定义规则。

这些目标中至少有一个不是静态库。仅在静态库之间允许循环依赖关系。
...
CMake错误:目标间依赖关系图包含以下强连接组件(循环):
...

好的,最后,我用一种非常偶然的方式解决了这个问题。我觉得我最初的问题不太适合我的真实问题,所以我会更新我的问题和相关内容

这个问题背后的原因是可执行文件和库(在本例中)的名称相同。要使其通过cmake构建过程,只需将
TEST_SDK
名称更改为任何其他名称(只要它与该可执行名称不同),例如从
TEST
更改为
TEST_SDK

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project( Test LANGUAGES CXX)
set( TEST_SDK test_sdk)       # we only need to change this line

...

我没有深入探究原因,但我认为在windows上有两个名称(这里是可执行文件的
Test
和库的
Test
)是相同的?

@Ted Lynmo我查看了我的代码,有与时间相关的调用。但我使用它的方式是
稳定的时钟::时间点开始=稳定的时钟::现在()。我不确定你所说的
稳定时钟
的意思是否是
稳定时钟
?我这边的困惑。删除了我的评论。我假设Windows上的“Test”==“Test”是因为不区分大小写的文件系统