Cmake:从命令行获取目标位置

时间:2020-02-03 19:28:14

标签: cmake

目前,我相信我需要从Cmake的命令行(构建后)中获取目标输出的位置。

或者,也许我需要编写CMake脚本,以允许进程在目标上运行(构建之后)。

我们的基本流程将是:

  1. 代码
  2. 构建
  3. 调试
  4. 构建
  5. 个人资料
  6. 构建

我想使它更容易从命令行的某个位置完成。

目前,我们正计划在构建内容中使用python前端(由于它是具有多个处理器的异构SoC,由于需要多个编译器,因此我们无法进行单一配置),因此在外面没什么大不了的。

我希望能够做类似的事情:

  cmake <configuration stuff> 
  build.py <target>
  debug.py <target>
  profile.py <target>

开发人员不必知道目标二进制文件的确切位置。 (仅供参考,这些事情比仅调用gdb或其他命令要复杂得多,因此它们确实需要脚本来通过第三方工具从命令行实现它)

这容易实现吗?还是我需要在Cmake中编写脚本,以便在配置过程中将所需信息输出到文件,然后在事后查询该文件?

非常感谢任何指导或帮助我实现目标。

编辑:在我的质询中要更加尖锐:

使用cmake配置后。有什么办法可以从构建目录中再次运行cmake来查询高速缓存/构建系统/任何内容,从而找出目标输出在哪里。

例如:

./source
   /modules
     /module1
        /submodule1
            /test1
        /submodule2
            /test1
     /module2
        /test1
     /module3
        /test1

我进入构建目录,执行cmake -S .. -B . <etc>

我现在有一棵树,里面装满了makefile和其他内容。

如果我确实制作了该树,则该树将填充有可大致反映源树的构建工件(至少以我的经验如此)<​​/ p>

如果我做make help,它将按名称输出一堆目标。

module1
submodule1
submodule1_test1
submodule2
submodule2_test1

现在,我想知道submodule1_test1的可执行文件在哪里,而不必知道其父级是module1。此时,我可以运行cmake并查询缓存/构建系统以获取该命名目标的位置吗?

如果不能,我可以通过在配置时形成“数据库”来自己进行管理。这不是一个问题。我只是希望cmake保留这些信息以便以后在其缓存中查询。

1 个答案:

答案 0 :(得分:2)

当您第一次使用CMake生成项目时,它会创建一个CMakeCache.txt文件,其中包含所有变量来缓存项目中的变量。您可以使用Python对其进行解析,然后找到 project_name_BINARY_DIR 变量。那将是您的构建目标根。从那时起,如果它们都具有标准命名模式(例如FooTests.exe),则可以使用Python递归检查测试可执行文件的子目录。

或者,如果您使用set cache命令,它也应该添加到CMakeCache.txt中。

相关问题