1

我的目标是在我们庞大而古老的代码库中找到从未被调用过的程序。我们的代码称为 neci,主要是 Fortran 和一些 C/C++ 代码。从这个问题的最佳答案中,我偶然发现了很棒的工具callcatcher,但我很难将它与 cmake 结合起来。

当我callcatcher通过手动编译一堆 Fortran 文件来使用时,一切正常并找到未使用的程序。

现在我想把这个工具嵌入到我们的cmake编译过程中并使用。

cmake \
    -DCMAKE_BUILD_TYPE=Debug \
    -DCMAKE_Fortran_COMPILER=mpifort -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx \
    -DCMAKE_Fortran_COMPILER_LAUNCHER=callcatcher -DCMAKE_C_COMPILER_LAUNCHER=callcatcher -DCMAKE_CXX_COMPILER_LAUNCHER=callcatcher \
    -DCMAKE_Fortran_LINKER_LAUNCHER=callcatcher -DCMAKE_C_LINKER_LAUNCHER=callcatcher -DCMAKE_CXX_LINKER_LAUNCHER=callcatcher \
     ~/code/neci

然后计算机会发出以下警告:

CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_Fortran_LINKER_LAUNCHER

事实上,当我编译时,VERBOSE=3 make -j neci我看到文件已正确编译,callcatcher但链接步骤并未在调用前添加callcatcher.

我的问题是:

  1. 如何强制cmake在链接器命令前面加上callcatcher
  2. 如果第一个问题隐藏了一个 XY 问题,我该如何解决我最初的目标,即在没有callcatcher.

我的 cmake 版本是 3.21.3。

4

0 回答 0