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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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,我有两个可执行文件,它们都需要链接到N个相同的库: add_executable(MyExe1 main1.cpp) add_executable(MyExe2 main2.cpp) target_link_libraries(MyExe1 lib1 lib2 lib3 ... libN) target_link_libraries(MyExe2 lib1 lib2 lib3 ... libN) 所以我必须写两次target\u link\u库;一次用于MyExe1,一次用于MyExe2。有

我有两个可执行文件,它们都需要链接到N个相同的库:

add_executable(MyExe1 main1.cpp)
add_executable(MyExe2 main2.cpp)

target_link_libraries(MyExe1 lib1 lib2 lib3 ... libN)
target_link_libraries(MyExe2 lib1 lib2 lib3 ... libN)

所以我必须写两次
target\u link\u库
;一次用于
MyExe1
,一次用于
MyExe2
。有没有办法缩短一些公共库链接到两个不同可执行文件的方式?我想知道是否可以链接
lib1
libN
在一个命令中同时向
MyExe1
MyExe2
库发送代码,以避免冗余并使CMake文件更干净。

您可以使用
set
命令从参数列表中设置变量:

add_executable(MyExe1 main1.cpp)
add_executable(MyExe2 main2.cpp)

set(LIBS lib1 lib2 lib3 ... libN)

target_link_libraries(MyExe1 ${LIBS})
target_link_libraries(MyExe2 ${LIBS})

有没有办法创建一个cmake伪库,让您定义lib1AndLib2,这样您就可以在“target\u link\u libraries(MyExe1 lib1AndLib2)”之类的东西中使用它?@JamesMoore是的,它被称为an,您可以使用
添加库(MyInterfaceLibName INTERFACE)
来创建它。