在使玩具可执行文件与另一个库一起玩耍时,找到链接所需的必要库的好方法是什么?
我将从compile_commands.json
文件(由CMake生成)中获取适当的编译命令,但我仍然必须手动找出需要可执行文件链接到的库。
例如:如果我有一个名为main.cpp
的文件:
#include <some_cool_library.hpp>
#include <iostream>
int main() {
some_cool_library::some_cool_type obj{"35"};
return 0;
}
我将从使用compile_commands.json
的项目中生成的some_cool_library.hpp
文件中获取适当的编译命令(这样我就可以将正确的-I
标志传递给编译器,而不必考虑全部)。
然后我将其编译(进行适当的编译命令修改):
/usr/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_ASIO_HAS_STD_CHRONO -DHAS_ZLIB -DWEBSOCKETPP_STRICT_MASKING -I<some-dir0> -I<some-dir1> -I<some-dir2> -isystem /usr/local/include -Wall -Wno-invalid-partial-specialization -O3 -DNDEBUG -pthread -std=gnu++17 -o prog /home/user/main.cpp && ./prog
最后,我将获得一些输出,这些输出会吐出一堆链接器错误,在这些错误中,我必须手动检查每个链接器错误并链接适当的库。有没有更好的方法来找到这些库?
学习如何使用库的标准方法是阅读该库的文档。
在某些情况下,pkg-config
可用于获取必要的编译器和链接器标志。这不能保证能正常工作,但是如果CMake似乎自动将库作为依赖项处理,则有一定的机会可以工作。