最近看了下github上的Trending
,看到个abseil-cpp
库,准备下载下来学习一下,具体就不过多介绍了,官网上有详细的说明。
它一部分功能可以直接包含头文件使用,但是其中有一部分需要包含源文件,如果每个项目都需要包含大量的源文件,这其中的依赖问题就需要很长时间,它使用bazel来解决源码之间的依赖问题,我不太了解bazel,也懒的去装这玩意,我主要想把它灵活的运用在QtCreator上。
其实qmake也可以解决依赖问题,但是可能比较麻烦,我尝试根据它项目中的bazel文件写了一些配置,可以大体上方便的使用:
把上面代码保存到abseil-cpp项目目录中,然后再自己的项目中使用:
absl += base spinlock_wait throw_delegate internal strings
include(e:/3rdParty/abseil-cpp/absl.pri)
测试代码:
#include <iostream>
#include <thread>
#include <chrono>
#include "absl/synchronization/internal/thread_pool.h"
#include "absl/base/call_once.h"
#include "absl/strings/string_view.h"
#include "absl/time/time.h"
int main()
{
const char * hello = "Hello World";
absl::synchronization_internal::ThreadPool pool(5);
auto start = absl::Now();
absl::string_view view(hello);
std::cout << view << std::endl;
std::cout << view.length() << std::endl;
absl::once_flag flag1;
auto func = [&](){
std::this_thread::sleep_for(std::chrono::seconds(5));
std::cout << view << std::endl;
absl::call_once(flag1, [](){
std::cout << "Hello World call_once" << std::endl;
});
};
for (int i = 0; i < 5; i++) {
pool.Schedule(func);
}
auto elapsed = absl::Now() - start;
std::cout << elapsed << std::endl;
std::cout << absl::ToInt64Milliseconds(elapsed) << "ms" << std::endl;
return 0;
}
总结一下,其实qmake可以实现的更完美,不过个人使用来说没有必要了。
补充:
abseil-cpp里的time以及ThreadPool相关库是需要cctz库的,但是cctz貌似在Windows下msvc2015没法编译过去,这就尴尬了。
20180808补充:
abseil-cpp已经支持cmake了,直接用cmake编译成静态库就可以使用了。
参考链接:
http://doc.qt.io/qt-5/qmake-test-function-reference.html
转载请注明: 本文《在QtCreator上使用abseil-cpp》来源于bstaint的博客
没有评论:
发表评论