是否可以将cmake项目链接到子项目?

时间:2016-06-09 07:10:01

标签: c++ cmake build-process

我有一个带有examples文件夹的C ++库项目。这些示例是独立的,即它们可以在没有源树的其余部分的情况下进行编译,就好像它们是使用库的真实应用程序一样。他们使用提供的FindMyLib.cmake来查找系统中已安装的库。

我想能够与整个库一起构建它们。最初,我将它们添加为子目录:

if(MYLIB_BUILD_EXAMPLES)
    add_subdirectory(examples/fooexample)
    add_subdirectory(examples/barexample)
endif()

但是这不起作用,因为在安装库之前我不能使用find_package。我可以将默认构建目录添加到搜索路径,但这还不够,因为在cmake运行时(显然)尚未构建库。

我该怎么做才能解决这个问题?有没有办法在构建它时将库透明地链接到这些子项目(并且还“禁用”find_package,因为它在没有安装的情况下必然会失败)。

2 个答案:

答案 0 :(得分:2)

准备 FindMyLib.cmake,使用 build 树链接到库,而不是 install 。例如,它可以将变量MyLib_LIBRARY变量设置为库目标

<强> cmake的建造/ FindMyLib.cmake

set(MyLib_LIBRARY MyLib)
set(MyLib_INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/include)
...

然后将CMAKE_MODULE_PATH列表添加到目录中,包含假脚本。这样一种方式将被例子使用:

if(MYLIB_BUILD_EXAMPLES)
    set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake-build ${CMAKE_MODULE_PATH})
    add_subdirectory(examples/fooexample)
    add_subdirectory(examples/barexample)
endif()

答案 1 :(得分:1)

解决方案可能是在您的示例中检查构建{{ Form::file('cascUpload' , Input::old('cascUpload'), array('id' => 'cascUpload' , 'type' => 'file' , 'accept' => '.doc , .docx , .pdf , .ppt , .pptx , .xlsx , .xls , .csv , .txt' )) }} 的目标是否存在,并将其用作依赖项(如果存在);否则调用MyLib

find_library()