Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 每个应用程序有多个目标_Cmake - Fatal编程技术网

Cmake 每个应用程序有多个目标

Cmake 每个应用程序有多个目标,cmake,Cmake,我是cmake的新手,我想实现以下行为。我有一个子目录programs,其中包含多个独立的程序。对于每个程序,我希望添加不同的目标(例如,分析或测试),并使用前缀命名。 这应该允许我像执行make prog1 analyze或make prog2 test那样执行它们 此外,我还希望同时执行相同类型的所有目标(例如测试目标)(例如通过进行测试) 为此,我有以下目录结构,其中包含两个CMakeLists.txt文件 CMakeLists.txt programs |-- prog1.c |

我是cmake的新手,我想实现以下行为。我有一个子目录
programs
,其中包含多个独立的程序。对于每个程序,我希望添加不同的目标(例如,分析或测试),并使用前缀命名。 这应该允许我像执行
make prog1 analyze
make prog2 test
那样执行它们

此外,我还希望同时执行相同类型的所有目标(例如
测试
目标)(例如通过
进行测试

为此,我有以下目录结构,其中包含两个
CMakeLists.txt
文件

CMakeLists.txt
programs
  |-- prog1.c
  |-- prog2.c
  |-- CMakeLists.txt
顶层文件包含宏定义
add_应用程序
,而
programs/CMakeLists.txt
为每个程序调用此宏。但是,如何编写宏,使我有多个目标和一个全局目标,用于相同类型的所有目标

macro(add_application NAME SOURCE_FILES)
endmacro()
add_application()
macro body中,您可以像往常一样为每个应用程序目标添加,使用宏参数名称构造它们的名称

对于全局目标,您可以在宏之外创建一次。在宏体内部,您可以调用
add_dependencies()
,以使全局目标从每个应用程序依赖:

CMakeLists.txt

add_custom_target(analize) # Create global target

macro(add_application NAME SOURCE_FILES)
    ... # Create application target itself
    add_custom_target(${NAME}-analize ...) # Create per-application target
    add_dependencies(analize ${NAME}-analize) # Dependency between global and per-application targets.
endmacro()


示例使用“analize”目标,因为“test”目标由CTest保留。最好不要将其用于其他目的。

这不是您想要的答案,但您应该真正了解一下
add\u test()
命令和
ctest
。另外,从架构的角度来看,您不应该测试可执行文件。那些
prog1.c
prog2.c
应该是库中实现的函数的精简包装。(解析命令行选项,设置所需参数,调用库函数。)库函数可以通过专用的测试可执行文件轻松测试。(您猜对了,您应该使用
add_test()
添加它,并可以通过
ctest
运行)