我试图了解如何使用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。
或在完全不同的目录中运行cmake
和make
cmd,并且两者的结果相同
我期望它可以在相同的CMakelists或具有环境变量export CMAKE_PREFIX_PATH=/path/to/FooBar/build:${CMAKE_PREFIX_PATH}
的另一个目录中工作
任何人都会对我的情况有什么想法? 谢谢
答案 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 ++应用程序中。