好的,我有一个解决方案.首先,重要的是要认识到静态库不会将其他静态库链接到代码中.必须创建一个组合库,在Linux上可以使用ar完成.有关详细信息,请参阅Linking static libraries to other static libraries.
考虑两个源文件:
test1.c:
int hi()
{
return 0;
}
test2.c中:
int bye()
{
return 1;
}
CMakeLists.txt文件是创建两个库,然后创建一个组合库,如下所示:
project(test)
add_library(lib1 STATIC test1.c)
add_library(lib2 STATIC test2.c)
add_custom_target(combined ALL
COMMAND ${CMAKE_AR} rc libcombined.a $ $)
在这种情况下,ar命令的选项与平台相关,尽管CMAKE_AR变量与平台无关.我将四处寻找是否有更通用的方法来做到这一点,但这种方法适用于使用ar的系统.
add_custom_target(combined ALL
COMMAND ${CMAKE_CXX_ARCHIVE_CREATE} libcombined.a $ $)
这应该是与平台无关的,因为这是用于由CMake在内部创建存档的命令结构.当然,您希望传递给归档命令的唯一选项是rc,因为这些选项已硬连线到用于ar命令的CMake中.