尽管正确生成了LibConfig.cmake,但无法使用cmake生成的库

时间:2019-01-12 16:31:25

标签: c++ cmake

我试图了解如何使用cmake管理多个项目,并且我以https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/How-to-create-a-ProjectConfig.cmake-file作为开始 我想创建一个可以包含lib Foo的项目(通过链接)

该示例已正确编译,我尝试将一个项目添加到名为“ app”的FooBar目录中

FooBar / app /

├── CMakeLists.txt
└── src
    ├── app.cpp

CMakeLists.txt

project(app)
find_package(FooBar)
add_executable(app
    src/app.cpp)
target_link_libraries(app ${FOOBAR_LIBRARIES})

app.cpp

#include<foo/foo.h>

int main(int argc, char** argv){
    foo();
    return 0;
}

我收到的错误是 app.cpp:(.text+0x10): undefined reference to `foo()'

似乎find_package和标头foo.h的导入工作正常。但是由于某种原因,该库似乎没有链接。

我试图通过add_subdirectory(app)将应用程序项目的CMakeLists.txt附加到FooBar CMakelists.txt。 或在完全不同的目录中运行cmakemake cmd,并且两者的结果相同

我期望它可以在相同的CMakelists或具有环境变量export CMAKE_PREFIX_PATH=/path/to/FooBar/build:${CMAKE_PREFIX_PATH}的另一个目录中工作

任何人都会对我的情况有什么想法? 谢谢

1 个答案:

答案 0 :(得分:0)

我刚刚发现为什么链接不起作用。 cmake的示例provided是一个c库,我的程序包是一个cpp应用程序。所以我将app.cpp更改为

extern "C"{
    #include<foo/foo.h>
}

int main(int argc, char** argv){

    //foo();
    foo();
    return 0;
}

,一切正常。 我的问题根本不是cmake的问题,只是我试图将c lib包含到c ++应用程序中。