如果 cmake 找不到非强制的 c++ 功能支持,pbuilder-dist 会失败吗?

如果 cmake 找不到非强制的 c++ 功能支持,pbuilder-dist 会失败吗?

我正在尝试根据本手册向我的 PPA 提交一个 deb:
https://packaging.ubuntu.com/html/packaging-new-software.html
我能够使用 构建我的应用程序bzr builddeb -- -nc -us -uc并使用 对其进行签名bzr builddeb -S。但pbuilder-dist groovy build myproject_0.2.8-1.dsc在 中执行../build-area失败。
完整日志可在 pastebin 中找到:https://pastebin.com/whr6Qsd1

我认为问题出在以下部分:

Determining if the CXX compiler accepts the flag -fno-keep-inline-dllexport failed with the following output:
Change Dir: /build/myapp-0.2.8/obj-x86_64-linux-gnu/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/gmake cmTC_3ab02/fast && gmake[1]: Entering directory '/build/myapp-0.2.8/obj-x86_64-linux-gnu/CMakeFiles/CMakeTmp'
/usr/bin/gmake -f CMakeFiles/cmTC_3ab02.dir/build.make CMakeFiles/cmTC_3ab02.dir/build
gmake[2]: Entering directory '/build/myapp-0.2.8/obj-x86_64-linux-gnu/CMakeFiles/CMakeTmp'
Building CXX object CMakeFiles/cmTC_3ab02.dir/DummyCXXFile.cxx.o
/usr/bin/c++    -std=c++0x -fno-keep-inline-dllexport   -o CMakeFiles/cmTC_3ab02.dir/DummyCXXFile.cxx.o -c /usr/share/cmake-3.16/Modules/DummyCXXFile.cxx
c++: error: command-line option '-fno-keep-inline-dllexport' is not supported by this configuration
gmake[2]: *** [CMakeFiles/cmTC_3ab02.dir/build.make:66: CMakeFiles/cmTC_3ab02.dir/DummyCXXFile.cxx.o] Error 1
gmake[2]: Leaving directory '/build/myapp-0.2.8/obj-x86_64-linux-gnu/CMakeFiles/CMakeTmp'
gmake[1]: *** [Makefile:121: cmTC_3ab02/fast] Error 2
gmake[1]: Leaving directory '/build/myapp-0.2.8/obj-x86_64-linux-gnu/CMakeFiles/CMakeTmp'



dh_auto_configure: error: cd obj-x86_64-linux-gnu && cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON -DCMAKE_INSTALL_RUNSTATEDIR=/run -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON "-GUnix Makefiles" -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu .. returned exit code 1
make: *** [debian/rules:6: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2

因此,cmake正在检查是否/usr/c++支持-fno-keep-inline-dllexport。编译器以 1 结尾,因为它不支持它,cmake 返回 2 和 dh_auto_configure 痛苦。

如果我cmake在我的系统上执行,我会得到以下标准输出:

-- Checking to see if CXX compiler accepts flag -ffunction-sections -fdata-sections -Wl,--gc-sections
-- Checking to see if CXX compiler accepts flag -ffunction-sections -fdata-sections -Wl,--gc-sections - yes
-- Checking to see if CXX compiler accepts flag -fno-keep-inline-dllexport
-- Checking to see if CXX compiler accepts flag -fno-keep-inline-dllexport - no
-- Checking to see if CXX compiler accepts flag -Werror=return-type
-- Checking to see if CXX compiler accepts flag -Werror=return-type - yes

因此,即使我的系统上的编译器不支持-fno-keep-inline-dllexport。我对此没意见。这对我来说无所谓。cmake不会失败。

看起来非强制功能检查失败会cmake破坏整个pbuilder-dist过程。有什么方法可以改变这种行为,或者我遗漏了什么?

Ps 我的构建依赖项是:debhelper-compat (= 13), cmake (>=2.8.9), gcc (>=4.6), qt5-qmake (>= 5.4), qtbase5-dev (>= 5.4), libtiff5-dev (>= 4.0.3), libjpeg8-dev (>= 8c), libpng-dev (>=1.6.2)

答案1

我不确定您的配置引发的具体问题。但有两种可能的解决方案

  1. 更改-std=c++0x-std=c++11
  2. 刪除選項-fno-keep-inline-dllexport

请检查你的配置文件,看看哪里需要修改。

在此之前,您可以检查这些选项是否有效。转到父目录CMakeFiles并尝试在命令行中复制失败的命令,并进行建议的修改:

  1. /usr/bin/c++ -std=c++11 -fno-keep-inline-dllexport -o CMakeFiles/cmTC_3ab02.dir/DummyCXXFile.cxx.o -c /usr/share/cmake-3.16/Modules/DummyCXXFile.cxx
  2. /usr/bin/c++ -std=c++0x -o CMakeFiles/cmTC_3ab02.dir/DummyCXXFile.cxx.o -c /usr/share/cmake-3.16/Modules/DummyCXXFile.cxx

为了实现此功能,您可能需要先调用cmake --debug-trycompile来源)。

笔记关于您的 pastebin(值得注意的消息,尽管不一定是问题)和程序:

  1. 您有大量ln: failed to create hard link '...' => '...': Invalid cross-device link消息。
  2. 有报告问题Qt5LinguistTools。也许值得安装qttools5-dev在你执行此操作之前。
  3. 报告称Configuring incomplete, errors occurred!。值得检查一下哪些是可能的故障根源。
  4. 如果您指定所发出的命令的精确列表(包括发出每个命令的目录),这将很有帮助。
  5. cmake“如果我在我的系统上执行...”是什么意思?与上面的观点相同。

有关的

https://stackoverflow.com/questions/19523412/qt-config-c11-but-std-c0x

https://code-examples.net/en/q/129e754

相关内容