小编Ran*_*nza的帖子

配置 cmake 以使用自制库而不是系统提供的库

我发现自己一遍又一遍地违背用 ccmake 配置 cmake 路径的原则,就像 for ex 的每次更改一样。编译器我的一些库路径丢失了。

特别是(未链接的)lapack、lapacke、gsl 的路径要么丢失,要么设置为系统默认值,而不是我用brew 安装的路径。

必须有一种方法告诉 cmake “忽略”系统库,而是查看自制程序路径(例如 /opt/homebrew/lib、/opt/homebrew/include 等)。

我不想链接这些库,因为不建议这样做,而且我在切换环境方面没有经验。

[编辑] MRE:

git clone https://gitlab.physik.uni-muenchen.de/AG-Scrinzi/tRecX.git
cd tRecX
cmake . -DCMAKE_BUILD_TYPE=Parallel
make -j 8
Run Code Online (Sandbox Code Playgroud)

我将以下内容添加到 .bash_profile/.zshrc 中:

export LDFLAGS="-L/opt/homebrew/opt/lapack/lib -L/opt/homebrew/opt/lapack/lib" 
export CPPFLAGS="-I/opt/homebrew/opt/lapack/include -I/opt/homebrew/opt/openblas/include" 
export PKG_CONFIG_PATH="/opt/homebrew/opt/lapack/lib/pkgconfig /opt/homebrew/opt/openblas/lib/pkgconfig"
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

cmake . -DCMAKE_PREFIX_PATH=/opt/homebrew -DCMAKE_FIND_FRAMEWORK=NEVER -DCMAKE_FIND_APPBUNDLE=NEVER -DCMAKE_FIND_USE_CMAKE_SYSTEM_PATH=FALSE -DCMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH=FALSE -DMPI_CXX_COMPILER=/opt/homebrew/bin/mpicxx -DMPI_C_COMPILER=/opt/homebrew/bin/mpicc -DCMAKE_CXX_COMPILER=/opt/homebrew/bin/g++-11 -DCMAKE_C_COMPILER=/opt/homebrew/bin/gcc-11
Run Code Online (Sandbox Code Playgroud)

cmake

11
推荐指数
1
解决办法
5439
查看次数

在折叠表达式中使用后增量会产生无序行为吗?

最近我想出了一个想法,如何枚举参数包(脉冲)中的元素,我对这个解决方案很满意一段时间:

lastValue = 0.0; i = -1;
lastValue += (... + ((time <= endtimes[++i] && time >= delays[i]) ? static_cast<Pulses*>(fields[i])->operator()(time - delays[i]) : 0.0));
Run Code Online (Sandbox Code Playgroud)

但是现在当我尝试使用 Clang 而不是 GCC 进行编译时,我收到了以下警告

警告:对“i”的多次未排序修改 [-Wunsequenced]

我读过几篇关于无序修改的帖子,但在他们的例子中,修改要么在表达式中发生两次,要么发生在“=”运算符的左侧。

另一方面,我的理解是参数包是按顺序评估的,所以......没有未排序的行为,对吗?或者我在这里完全错了,编译器总是对的?

c++ gcc clang fold-expression

-1
推荐指数
1
解决办法
55
查看次数

标签 统计

c++ ×1

clang ×1

cmake ×1

fold-expression ×1

gcc ×1