cmake 如何直接联编其它cmake库?

一个一个库编译好再add_library太痛苦了,且cmake需要分别指定debug/release再分别编译.
我的设想是,建立一个程序,然后直接引用到另一个cmake库.程序debug时编译库的debug版本,程序release时编译库的release版本.
一个简单的例子-和zlib联编:
project(hello)
SET(MODULE_PATH C:/modules)
INCLUDE_DIRECTORIES($MODULE_PATH/zlib-1.2.8)
add_subdirectory($MODULE_PATH/zlib-1.2.8)
add_library(zlib STATIC)
add_executable(hello hello.cpp)
target_link_libraries(hello zlib)

zlib之前没编译,只包含下载的源文件等.希望编译hello时编译zlib.但我的写法报错说add_library没用任何源文件(但zlib下的cmakelists.txt有啊).请问应该如何写cmakelists.txt?

阅读 4.9k
2 个回答

你可以使用cmake ExternalProject

一般都是一个个add_library,你如果嫌麻烦,那就编译每一个库的时候生成.pc文件,用以指明这个库的路径和头文件路径,以及编译选项等。用pkgconfig来查找你需要的库对应的pc文件,然后会从里面解析出来库路径进行连接。不过这些工作都要额外的脚本来实现,可能你会觉得写这些脚本还不如add_library来得方便。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题