CMake为静态库生成-L <path> -l <​​lib>链接标志

maq*_*qui 7 cmake static-libraries static-linking

我正在使用CMake 2.8来构建基于MQX OS的应用程序(使用CodeWarrior).
CMake项目基本上构建了一组静态库(比如说LIB1和LIB2).
然后我在最终的可执行cmake规则中引用这些库:

target_add_executable(X ${some_sources})
target_link_libraries(X LIB1 LIB2)
Run Code Online (Sandbox Code Playgroud)

我的问题是一些符号在一个库中被定义.
因此,链接命令如:

mwldarm <args> -o <output> <objects> /path/to1/libLIB1.a /path/to2/libLIB2.a
Run Code Online (Sandbox Code Playgroud)

会导致符号错误的多重定义.相反,我希望CMake生成一个链接命令,如:

mwldarm <args> -o <output> <objects> -L/path/to1 -L/path/to2 -lLIB -lLIB2
Run Code Online (Sandbox Code Playgroud)

问题:如何从CMAKE获取以下变量?

  • 图书馆目录标志(例如: -L/path/to1 -L/path/to2)
  • 库链接标志(例如:-lLIB -lLIB2)

我已经阅读了有关RPATH的内容,但它似乎只涉及共享库.我对吗?

谢谢你提前.
我很感激

Mas*_*ano 3

看来策略CMP0003可能正是您所需要的。

要使用它,请在您的开头附近添加以下行CMakeLists.txt

CMAKE_POLICY( SET CMP0003 OLD )
Run Code Online (Sandbox Code Playgroud)

另一种可能性是直接设置依赖项和搜索路径,但这不是最干净的方法。假设您的库被称为liba.alibb.a,那么:

LINK_DIRECTORIES( ${paths_to_search_for} )
TARGET_ADD_EXECUTABLE(X ${some_sources} )
ADD_DEPENDENCIES(X LIB1 LIB2)
TARGET_LINK_LIBRARIES(X a b )
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下ab不是 cmake 目标,因此需要一些机制来正确设置依赖项。