是否可以将install(TARGETS ...)与在add_subdirectory中添加的目录中定义的目标一起使用?
我的用例是,我想为etest构建e.gg rpm.gtest项目恰好有一个没有任何安装语句的CMakeLists.txt.我想构建包而不将这些语句添加到gtest的CMakeLists.txt.
我有这个结果目录结构:
+ gtest-1.5.0/...
+ CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
gtest-1.5.0的CMakeLists定义了这样的库:
cxx_static_library(gtest "${cxx_strict}" src/gtest-all.cc)
cxx_static_library(gtest_main "${cxx_strict}" src/gtest_main.cc)
target_link_libraries(gtest_main gtest)
Run Code Online (Sandbox Code Playgroud)
现在我想在我的CMakeLists.txt中添加这样的内容:
add_subdirectory(gtest-1.5.0)
install(TARGETS gtest gtest_main ARCHIVE DESTINATION lib)
Run Code Online (Sandbox Code Playgroud)
但是cmake正确地指出:
CMake Error at CMakeLists.txt:10 (install):
install TARGETS given target "gtest" which does not exist in this
directory.
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有修补gtest-1.5.0的情况下做到这一点?
我想尽可能快地从文件读取单个字节到D2应用程序.应用程序需要每字节字节,因此读取较大的数据块不是读取器接口的选项.
为此,我在C++,Java,D2中创建了一些简单的实现:https://github.com/gizmomogwai/performance.
如您所见,我在应用程序代码和内存映射文件中尝试了普通读取,缓冲区.对于我的用例,内存映射解决方案效果最好,但奇怪的是D2比java慢.我希望D2能够在C++和Java之间登陆(C++代码用-O3 -g编译,D2代码用-O -release编译).
那么请告诉我这里我做错了什么以及如何加快D2实施.
为了让您了解用例,这里是一个C++实现:
class StdioFileReader {
private:
FILE* fFile;
static const size_t BUFFER_SIZE = 1024;
unsigned char fBuffer[BUFFER_SIZE];
unsigned char* fBufferPtr;
unsigned char* fBufferEnd;
public:
StdioFileReader(std::string s) : fFile(fopen(s.c_str(), "rb")), fBufferPtr(fBuffer), fBufferEnd(fBuffer) {
assert(fFile);
}
~StdioFileReader() {
fclose(fFile);
}
int read() {
bool finished = fBufferPtr == fBufferEnd;
if (finished) {
finished = fillBuffer();
if (finished) {
return -1;
}
}
return *fBufferPtr++;
}
private:
bool fillBuffer() {
size_t l = fread(fBuffer, …
Run Code Online (Sandbox Code Playgroud)