在CMake的自定义目标中定义变量

时间:2015-07-21 23:31:33

标签: cmake

我有一个带有两个目标(比如,target1和target2)的CMake文件,通过" add_custom_target"在我的源目录的顶层。我在较低级别的目录中有一些外部项目。在总体项目中," TEST_COMMAND $ {Test_Command_Variable}"被定义为ExternalProject_Add()的一部分。

我想改变那个vaiarble $ {Test_Command_Variable},具体取决于我使用的是自定义target1还是target2。目前,在定义自定义目标之前,在顶级CMakeLists.txt中定义了$ {Test_Command_Variable}。我只想根据是否调用target1或target2来改变该变量。有没有办法重新定义该变量?也许根据是否选择了target1或target 2来做一个条件if语句(这看起来很简单,但是我找不到访问自定义目标的名称的方法!) 。

澄清:我有两个测试集合。我想键入" make target1"它运行我的第一个测试集合。我想键入" make target2"它测试我的第二个测试集合。问题是我还有一个外部项目,其中有一些测试。外部项目有一个TEST_COMMAND(test_command_variable),它不区分target1测试和target2测试。我希望能够根据我是否运行" make target1"来改变该变量。或"制作target2"。

1 个答案:

答案 0 :(得分:0)

好吧,我终于开始工作了。我做了一些完全不同的事情来实现我的目标。我放弃了尝试根据目标切换变量的目标。要清楚,这是我的目标:

"制作target1"仅运行第1组中的测试。

"制作目标2"仅运行第2组中的测试。

我按照as per this question I asked earlier配置了每个测试。我的问题是我有外部项目我试图将该变量传递下来,因此它将根据顶层定义的配置切换Group1或Group 2测试。我知道传递ctest -C group1_configuration标志(或group2测试的group2_configuration标志)会起作用,但我似乎无法传递给我的外部项目。幸运的是,我的解决方案很简单"。

我编写了一个shell脚本,它将执行正确的ctest ... -C group1_configuration(或ctest ... -C group2_configuration)并将其命名为test_script1.sh和test_script2.sh。这些脚本将在构建目录中移动,并在每个外部项目构建目录中调用前面提到的ctest命令。然后,在我在CMakeLists.txt中定义的自定义目标中,我让它调用shell脚本,每个自定义目标执行正确的shell脚本,该脚本在构建目录中移动,调用正确 ctest命令,在每个项目和外部项目中都有正确的配置标志。