小编Dor*_*ian的帖子

(target_)link_libraries 和 (target_)include_directories 之间的区别

我正在为一个使用 CMake 的大型 C++ 项目而苦苦挣扎。现在我正在尝试添加一个依赖项(一个预编译和安装的库),但我不确定添加的位置、包含的内容以及链接它的位置。

特别是,我想知道以下命令之间的区别:

  • include_directories
  • target_include_directories
  • link_libraries
  • target_link_libraries

另外,当我需要使用以下命令时:

  • find_package
  • add_library

我知道它与仅标头库等有关,但我找不到易于理解和简洁的解释。

另外,我应该如何处理以下情况:

包含的库需要例如 Boost,但核心项目不需要。如何避免使整个CMakeLists.txt文件和二进制文件膨胀,并且仍然使用预编译库?(我认为这也是这个问题的一部分)

c++ cmake

3
推荐指数
1
解决办法
3378
查看次数

将空源文件添加到静态库的原因?

我在 C++ 中见过很多这种情况,即开发人员向 CMake 中的库添加一个空源文件。这里有一个示例,其中有一个空源文件,可以在此处找到。\nCMake 文件包含这一行:

\n
# build the library\nadd_library(${PROJECT_NAME} STATIC src/dependency-tracker.cc)\n
Run Code Online (Sandbox Code Playgroud)\n

仅当文件夹中没有其他源文件时才会出现这种情况src,因此该库将是“仅标头”。他们为什么这样做呢?

\n
\n

我指的目录结构:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 include\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 okvis\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kinematics\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 implementation\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Transformation.hpp   <- header only implementation\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 operators.hpp\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Transformation.hpp\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dependency-tracker.cc   <- empty source file\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 runTests.cpp\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 TestTransformation.cpp\n
Run Code Online (Sandbox Code Playgroud)\n

c++ cmake

3
推荐指数
1
解决办法
1829
查看次数

如何使用 C++ 数组填充 torch::tensor?

这是非常基本的:我通常使用 Eigen3 进行数学运算,但需要使用 libtorch 进行网络前向传递。现在我想用torch::tensor我的 Eigen3 (或纯 C++ )中的数据填充array,但没有for循环。我怎样才能做到这一点?

这是带有循环的解决方案:

Eigen::Matrix<double, N, 1> inputEigen;  // previously initialized

torch::Tensor inputTorch = torch::ones({1, N});  // my torch tensor for the forward pass
for (int i = 0; i < N; i++) {
  inputTorch[0][i] = inputEigen[i];  // batch size == 1
}

std::vector<torch::jit::IValue> inputs;
inputs.push_back(inputTorch);
at::Tensor output = net.forward(inputs).toTensor();
Run Code Online (Sandbox Code Playgroud)

目前效果很好,但N可能会变得非常大,我只是在寻找一种方法来直接torch::tensor使用以前使用过的 C++设置我的底层数据array

c++ arrays eigen tensor libtorch

3
推荐指数
1
解决办法
4379
查看次数

标签 统计

c++ ×3

cmake ×2

arrays ×1

eigen ×1

libtorch ×1

tensor ×1