![]() |
1
109
是的,这相当容易。只需使用两个“添加库”命令:
即使您有许多源文件,您也会将源列表放在一个cmake变量中,所以仍然很容易做到。 在Windows上,您可能应该为每个库赋予不同的名称,因为共享和静态都有一个“.lib”文件。但是在Linux和Mac上,您甚至可以为两个库赋予相同的名称(例如libmylib.a和libmylib.so):
但我不建议将库的静态版本和动态版本命名为相同的名称。我更喜欢使用不同的名称,因为这样可以更容易地为链接到库的工具选择编译行上的静态链接和动态链接。通常我选择libmylib.so(共享)和libmylib-static.a(静态)这样的名称。(这些是Linux上的名称。) |
![]() |
2
63
由于cmake版本2.8.8,您可以使用“对象库” 避免重复编译对象文件 . 使用Christopher Bruns的两个源文件库示例:
从 CMake docs :
简单地说,
您所付出的代价是,对象文件必须作为独立于位置的代码构建,因为共享库需要这样做(静态libs不在乎)。请注意,与位置无关的代码可能效率较低,因此如果您的目标是获得最大的性能,那么您将使用静态库。此外,更容易分发静态链接的可执行文件。 |
![]() |
3
22
通常不需要为您的目的重复添加库调用。只是利用
在用-dbuild_shared_libs:bool=on和off在另一个目录中构建第一个(在一个源目录中)时 |
![]() |
4
-2
这确实是可能的。正如@Christopher Bruns在回答中所说,您需要添加两个版本的库:
然后,如前所述 here ,需要指定两个目标都应使用相同的输出名称,而不覆盖彼此的文件:
这样,您将同时获得lib mylib.a和lib mylib.so(在Linux上)或mylib.lib和mylib.dll(在Windows上)。 |