我正在用c ++构建一个库,我用CMake生成项目。 但是,我不知道如何在库的顶层目录中编写好的CMakeLists.txt。
事实上,如果我想简单地将库包含在另一个项目中(添加库,链接源等等),它实际上是有效的,但我希望如果我在没有其他项目的情况下生成库本身,它会生成一个图书馆提供的演示项目。 所以我想要一个CMakeLists
我的第一个想法是搜索“project(xxx)”是否已被调用,但我不知道这是不是一个好主意。由于我真的不知道有什么好的做法,我在文档中找到信息确实很困难。
答案 0 :(得分:1)
检测当前项目是否也是顶级项目的快速方法是检查PROJECT_SOURCE_DIR
和CMAKE_SOURCE_DIR
:
if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
message("You are building stand-alone!")
endif()
但请注意,这可能不是您问题的最佳解决方案。允许将库提取到这样的第三方构建中需要来自库和封闭构建的显式支持。
或者,您可以单独构建两个项目,但为库提供proper packaging以便于集成。这种方法通常更灵活,因为它使您的客户可以自由选择何时以及如何构建您的库,然后再将其拖入构建中。