【发布时间】:2017-11-09 16:08:37
【问题描述】:
我目前正在尝试使用 cmake 让 sigpack 找到 armadillo。包含犰狳似乎不是问题,因为我可以使用find_package() 包含它,但由于某种原因sigpack 找不到它。
sigpack 是一个只有头文件的库,我将它包含到我的项目中的方式是将头文件移动到我的项目中,并手动将它们包含在 cmake 中,我有点不确定它是否是正确完成的,或者如果它本来可以是其他的。
MESSAGE(“In spectogram CMAKELIST”)
MESSAGE( "${CMAKE_CURRENT_SOURCE_DIR}/base/base.h" )
SET(HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/base/base.h
${CMAKE_CURRENT_SOURCE_DIR}/fftw/fftw.h
${CMAKE_CURRENT_SOURCE_DIR}/base/base.h
${CMAKE_CURRENT_SOURCE_DIR}/filter/filter.h
${CMAKE_CURRENT_SOURCE_DIR}/gplot/gplot.h
${CMAKE_CURRENT_SOURCE_DIR}/image/image.h
${CMAKE_CURRENT_SOURCE_DIR}/kalman/kalman.h
${CMAKE_CURRENT_SOURCE_DIR}/parser/parser.h
${CMAKE_CURRENT_SOURCE_DIR}/resampling/resampling.h
${CMAKE_CURRENT_SOURCE_DIR}/spectrum/spectrum.h
${CMAKE_CURRENT_SOURCE_DIR}/timing/timing.h
${CMAKE_CURRENT_SOURCE_DIR}/window/window.h
${CMAKE_CURRENT_SOURCE_DIR}/sigpack.h
)
find_package(Armadillo REQUIRED)
include_directories(${ARMADILLO_INCLUDE_DIRS})
add_library(spectogram STATIC spectogram.cpp spectogram.h ${HEADERS})
target_link_libraries(spectogram PUBLIC ${ARMADILLO_LIBRARIES})
target_include_directories(spectogram PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(spectogram PUBLIC cxx_defaulted_functions)
MESSAGE(“out spectogram CMAKELIST”)
目前给我一个错误的代码是这个类定义:
#pragma once
#include "sigpack.h"
class spectogram {
private:
int m_var{ 23 };
public:
void set_var(int value);
int get_var() const;
};
此代码当前给我错误消息:
error: ‘arma_inline’ does not name a type
arma_inline double sinc( double x )
这可能是因为 sigpack 看不到犰狳?我怎么做?
这样编译:
#pragma once
#include <armadillo>
//#include <sigpack.h> sigpack.h cant see armadillo?
class spectogram {
private:
int m_var{ 23 };
arma::mat somethind;
public:
void set_var(int value);
int get_var() const;
};
【问题讨论】:
-
看起来子目录中的标题(如
base/base.h)并不打算直接包含在内。请改用#include <sigpack.h>。 -
@Tsyvarev 我试过了……同样的问题……
-
奇怪:
sigpack.h首先包含armadillo,然后又定义了arma_inline宏。 -
是的...更奇怪的是我可以在类定义代码中
#include <armadillo>没有任何问题,但是当它在sigpack.h中完成时,就会出现问题。 -
你收到here的犰狳了吗?
标签: c++ cmake header armadillo