小编Joa*_*m W的帖子

为什么cmake文件GLOB邪恶?

CMake文档说明命令文件GLOB:

我们不建议使用GLOB从源树中收集源文件列表.如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时请求CMake重新生成.

网络中的几个讨论线程第二个是通配源文件是邪恶的.

但是,为了使构建系统知道已添加或删除了一个源,这就足够了

touch CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

对?

然后,这比编辑CMakeLists.txt插入或删除源文件名更省力.也难以记住.所以我认为没有任何充分理由提出反对意见file GLOB.

这个论点有什么问题?

glob cmake

26
推荐指数
3
解决办法
1万
查看次数

autotools生成的tarball的用户收到错误消息:aclocal-1.13:找不到命令

我正在使用autoconf版本2.69生成的安装脚本分发tarball.适用于许多不同的机器.现在,在新的Arch Linux系统上工作的用户报告configure正确执行,但会make立即终止,并显示以下错误消息:

/home/user/project/build-aux/missing: line 81: aclocal-1.13: command not found
WARNING: 'aclocal-1.13' is missing on your system.
         You should only need it if you modified 'acinclude.m4' or
         'configure.ac' or m4 files included by 'configure.ac'.
         The 'aclocal' program is part of the GNU Automake package:
         <http://www.gnu.org/software/automake>
         It also requires GNU Autoconf, GNU m4 and Perl in order to run:
         <http://www.gnu.org/software/autoconf>
         <http://www.gnu.org/software/m4/>
         <http://www.perl.org/>
make: *** [aclocal.m4] Error 127
Run Code Online (Sandbox Code Playgroud)

acinclude.m4项目目录中没有.用户确保他没有修改aclocal.m4,configure.ac文件m4/或项目中的任何其他内容.

错误信息对我来说没有意义:据我所知,aclocal我跑的时候会被执行 …

automake autoconf makefile m4 autoreconf

17
推荐指数
3
解决办法
3万
查看次数

如何摆脱doxygen协作图中的"size_t"

Doxygen(v 1.8.11)创建了很好的UML协作图.很好,除了混乱的线条变为"size_t".形式正确,但完全没用.有没有办法阻止"size_t"出现在聚合类中?

c++ uml doxygen

9
推荐指数
1
解决办法
216
查看次数

如何在CMakeLists.txt中覆盖Ctest默认超时1500

CMakeLists.txt包括线

include(CTest)
enable_testing()
set(CTEST_TEST_TIMEOUT 3)
add_test(...)
Run Code Online (Sandbox Code Playgroud)

ctest有效,但忽略了我设置超时的尝试.相反,它以默认超时1500运行.

如何更改默认超时?如何CTEST_TEST_TIMEOUT使用?

timeout cmake ctest

8
推荐指数
1
解决办法
2710
查看次数

如何将FILE**变量设置为stdout?

我的生产代码的样机:

/* version 1 */
#include <stdio.h>
FILE** fout = &stdout;
int main() {
     fprintf( *fout, "hello\n" );
}
Run Code Online (Sandbox Code Playgroud)

在gcc下正常工作,但据报道无法在mingw下编译(lvalue需要作为一元'&'操作数).

我看到设置FILE*等于stdout portable吗?; 我明白那个

/* version 2 */
#include <stdio.h>
int main() {
    FILE* fout = stdout;
    fprintf( fout, "hello\n" );
}
Run Code Online (Sandbox Code Playgroud)

完全有效.但是,我需要预设一个全局变量.不幸,

/* version 3 */
#include <stdio.h>
FILE* fout = stdout;
int main() {
    fprintf( fout, "hello\n" );
}
Run Code Online (Sandbox Code Playgroud)

不适合替换版本1; 它甚至不在gcc下编译(第2行:初始化元素不是常量).

知道如何将stdout变为在main()启动之前初始化的变量吗?

c mingw

7
推荐指数
2
解决办法
2万
查看次数

CTest、CMake 和 MinGW:可执行文件构建,但无法运行,因为找不到新的 DLL

顶层CMakeLists.txt包含:

include(CTest)
add_subdirectory(lib)
add_subdirectory(demo)
add_subdirectory(test)
Run Code Online (Sandbox Code Playgroud)

lib/CMakeLists.txt本质上是:

add_library(MyLib <sources>)
Run Code Online (Sandbox Code Playgroud)

demo/CMakeLists.txt本质上是:

add_executable(Demo demo.c)
target_link_libraries(Demo MyLib)
Run Code Online (Sandbox Code Playgroud)

test/CMakeLists.txt只是:

add_test(NAME Demo COMMAND Demo)
Run Code Online (Sandbox Code Playgroud)

从 gitlab-runner 中,我们执行:

cmake -G "Ninja" -DCMAKE_INSTALL_PREFIX=C:\opt\x64 -B. ..
cmake --build
ctest --output-on-failure
Run Code Online (Sandbox Code Playgroud)

前两步成功;第三个失败并显示:

Start 1: Demo
1/1 Test #1: Demo .......................Exit code 0xc0000135
***Exception:   0.03 sec
Run Code Online (Sandbox Code Playgroud)

如果我重试:

cmake --install
ctest
Run Code Online (Sandbox Code Playgroud)

然后测试成功。所以唯一的问题是build/lib/mylib.dll运行时没有发现ctest。而C:\opt\x64\libPATH,因此 DLL 是在 后找到的cmake --install。然而,这不是我们想要的:ctest应始终使用当前版本中的新 DLL,而不是已安装的版本。

在Linux下,一切正常。为什么 Windows 和 MinGW 不支持呢?这是 CMake 中的错误吗?我们如何解决这个问题,以便ctest …

dll mingw cmake environment-variables ctest

7
推荐指数
2
解决办法
1695
查看次数

在 MinGW 与 MSVS 下的 Windos 导出/导入符号;CMake 的 WINDOWS_EXPORT_ALL_SYMBOLS 被忽略

要使用 Visual Studio 构建 C 库,请使用 CMake 命令

set(WINDOWS_EXPORT_ALL_SYMBOLS ON)
Run Code Online (Sandbox Code Playgroud)

使我免于添加__declspec(dllexport)__declspec(dllimport)在函数声明之前;只有全局变量需要显式导入/导出符号。

在 MinGW 下(阅读:MinGW 或其推荐的替代品 Mingw-w64)这不起作用。将应用程序(也用 MinGW 构建)链接到我的库失败,直到我在每个函数前面粘贴了导入/导出符号。而长答案/sf/answers/2259938271/表明相反:MinGW 下不需要导入/导出符号。这个答案对吗?那么如何摆脱对导入/导出符号的需求?

windows mingw cmake dllexport declspec

7
推荐指数
1
解决办法
474
查看次数

CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 不覆盖全局变量

将 CMake 下的 C++ 库移植到 Windows。

  • 选项 1:用__declspec(dllexport).
  • 选项 2:set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

我们选择选项 2,因为它看起来更容易,并且保持我们的来源完整。工作起来就像一个魅力:我们的应用程序编译并与库 dll 链接。

但是,它仅确保类和函数的导出。导出全局变量需要做什么?像:

lib_source.cpp:
    int my_secret;

app.cpp:
    extern int my_secret;
Run Code Online (Sandbox Code Playgroud)

c++ windows dll global-variables cmake

5
推荐指数
1
解决办法
5335
查看次数

如何通过排除不需要的子模块来加速`import numpy`

我们有一个测试套件,可以执行数百个 Python 脚本。在优化了自己的代码之后,我们发现现在大部分的测试时间都花在了加载 numpy 和 matplotlib 上。让我们在这里关注 numpy。

time python3 -c 'import numpy'
Run Code Online (Sandbox Code Playgroud)

给我 360 毫秒。

命令

python3 -X importtime -c 'import numpy'
Run Code Online (Sandbox Code Playgroud)

显示大部分时间花在加载我们不需要的子模块numpy.fft, numpy.polynomial, 上numpy.random。也许我们甚至不需要numpy.lib。如何防止这些子模块被加载?

我们幼稚的尝试

python3 -X importtime 'from numpy import core'
Run Code Online (Sandbox Code Playgroud)

没有任何改善;其他模块core仍然列出,加载时间基本不变。

python performance module numpy python-import

5
推荐指数
0
解决办法
63
查看次数

python 找不到使用 pipx 安装的模块

Debain stable 希望我使用 pipx 安装 Python 模块。所以我这样做

$ pipx install auditwheel
$ pipx ensurepath
$ python3 -m pipx ensurepath
$ python3
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import auditwheel
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'auditwheel'
>>> 

Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python debian pipx

5
推荐指数
1
解决办法
4843
查看次数