我的 C++ 项目doggo
has a doggo/external/
第三方代码的目录。目前它包含gtest https://github.com/google/googletest和 CMakeLists.txt:
# Google gtest for unit testing.
add_subdirectory(gtest)
message("gtest include dir: ${gtest_SOURCE_DIR}")
include_directories(${gtest_SOURCE_DIR})
我的顶级doggo/CMakeLists.txt 包含行add_subdirectory(external)
查找并构建第三方库。一切都像一个魅力——我可以包括 gtest#include <gtest/gtest.h>
。现在我想将 randomkit C 库添加到doggo/external/
,就像这里所做的那样:来自 numpy 的 randomkit https://github.com/deepmind/torch-randomkit/tree/master/randomkit.
我怎样才能让 randomkit 构建在我的doggo/external/
目录?应该做什么doggo/external/CMakeLists.txt
看起来像?
然后我应该能够通过将标头包含在我的 x.cpp 文件中来包含 C 标头extern "C" { ... }
block (详细信息在这里 https://stackoverflow.com/a/13694703/3765905).
UPDATE: 这里如何安装randomkit?
我已经包含了一个与上面类似的 CMakeLists.txt 条目,但是对于 randomkit,该目录看起来像,
external
├── CMakeLists.txt
├── gtest
│ └── ...
└── randomkit
├── CMakeLists.txt
├── distributions.c
├── distributions.h
├── randomkit.c
└── randomkit.h
and the randomkit/CMakeLists.txt
:
project(randomkit)
file(GLOB SOURCES "*.c")
add_library(randomkit SHARED ${SOURCES})
INSTALL(
DIRECTORY ${CMAKE_SOURCE_DIR}/
DESTINATION "/usr/local/"
#DESTINATION ""
FILES_MATCHING PATTERN "*.h*")
(第二个目的地被注释掉以表明我也尝试过)
然而,当我为我的顶级项目运行构建步骤时doggo
我尝试时遇到错误#include <randomkit/distributions.h>
:
doggo/src/random_fooz.cpp:10:37: fatal error: randomkit/distributions.h: No such file or directory
UPDATE 2:doggo/CMakeLists.txt:
project(doggo)
# Find and build third-party libraries
add_subdirectory(external)
# Add source dirs to the search path so cmake can find headers
include_directories(${CMAKE_SOURCE_DIR}/include/)
# Collect source files and build
file(GLOB_RECURSE doggo_srcs ${CMAKE_SOURCE_DIR}/src/*.cpp)
add_library(doggo ${doggo_srcs})
# Setup executables
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/)
add_subdirectory(exec)
# Tests
add_subdirectory(test)