请教一个cmake编译链接库的问题

qq4398736 2015-09-20 07:46:50
有一个A库,里面提供func1和func2两个函数,编译之后生成libAAA.a
CMakeLists.txt如下:
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_FILES)

ADD_LIBRARY(AAA STATIC ${SOURCE_FILES})

INSTALL(TARGETS AAA DESTINATION lib)
FILE(GLOB headers *.h)
INSTALL(FILES ${headers} DESTINATION include/util)


有一个B库,里面调用了A库的func1,并提供func3函数,编译之后生成libBBB.a
CMakeLists.txt如下:
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})

AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_FILES)

ADD_LIBRARY(BBB STATIC ${SOURCE_FILES})

INSTALL(TARGETS BBB DESTINATION lib)
FILE(GLOB headers *.h)
INSTALL(FILES ${headers} DESTINATION include/sapp)


有一个工程C,调用A库的func2和B库的func3,编译之后生成可执行文件。
CMakeLists.txt如下:
INCLUDE_DIRECTORIES(/data/proj/test/ABC/include)

LINK_DIRECTORIES(/data/proj/test/ABC/lib)
LINK_LIBRARIES(AAA BBB)

AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_FILES)

ADD_EXECUTABLE(CCC ${SOURCE_FILES})


其中A和B在同一个工程下,编译生成静态链接库之后,会make install到/data/proj/test/ABC目录下。

问题是,编译A和B所在工程都正常,但是编译C工程时会出现链接错误,提示func1未定义(undefined reference to `func1()')。
即使我在B的CMakeLists.txt中加上一行LINK_LIBRARIES(AAA)也不行,还是会报同样的错误。
求高手帮忙看一下,感激不尽,我只有这么多分了,全给了。
...全文
1289 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
娃哈哈纯净李 2017-03-09
  • 打赏
  • 举报
回复
link_libraries( lib1 lib2 ...): All targets link with the same set of libs,这应该是所有的目标文件都是用相同的一系列-l参数,但是真正的链接需要TARGET_LINK_LIBRARIES才开始进行。
假正经的班长 2015-09-21
  • 打赏
  • 举报
回复
你先手动链接一下试试看,如果能链接通过,再找CMake的问题。 Linux下,这往往是未正常引入A库导致
qq4398736 2015-09-21
  • 打赏
  • 举报
回复
问题解决了,把工程C中的LINK_LIBRARIES(AAA BBB)这一行改成TARGET_LINK_LIBRARIES(CCC BBB AAA)并且放在最后一行就行了。 我想问一下,LINK_LIBRARIES和TARGET_LINK_LIBRARIES有啥区别呢,不都是把库链接进来的吗,为啥一个行一个不行呢?

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧