我试图将Windows GNU GSL头文件库(从https://gnuwin32.sourceforge.net/packages/gsl.htm下载)包含到C++的示例代码中,但不幸的是,有很多错误。
下面是我的存储库的结构:
folder/
gsl/
gsl_sf_bessel.h
gsl_mode.h
*.h # other header files
main.cpp
CMakeLists.txt
main.cpp是这样的:
# include <stdio.h>
# include <gsl_sf_bessel.h>
int main (void)
{
double x = 5.0;
double y = gsl_sf_bessel_J0 (x);
printf ("J0(%g) = %.18e\n", x, y);
return 0;
}
和CMakeLists.txt文件中创建一个文件夹:
cmake_minimum_required(VERSION 3.0.0)
project(demoproject VERSION 0.1.0)
add_executable(
demoexecutable
main.cpp
)
target_include_directories(
demoexecutable
PUBLIC
gsl/
)
当编译main.cpp时,我得到的错误是:
fatal error: gsl/gsl_mode.h: No such file or directory
[build] 26 | #include <gsl/gsl_mode.h>
看起来它设法从gsl/
中找到了gsl_sf_bessel.h
,但是gsl_sf_bessel.h
需要gsl_mode.h
,而编译器却找不到。有什么办法可以解决这个问题吗?
我在CMakeLists.txt中尝试了不同的函数组合,如add_library
、include_directories
、target_link_libraries
,但不幸的是没有任何效果。
2条答案
按热度按时间oyxsuwqo1#
尝试将
${CMAKE_CURRENT_SOURCE_DIR}
添加为包含目录。该目录包含gsl/gsl_mode.h
。gsl
目录不包含其自身,因此将其添加为包含目录将不会消除该错误。tuwxkamq2#
我在我的CMake项目中采用了以下做法:
1)项目的文件夹结构。
有一个
include/${PROJECT_NAME}
子文件夹(即include
子文件夹,以及其中另一个以项目名称命名的子文件夹)。例如,在您的情况下:2)源代码/CMakeLists. txt文件。
在文件的顶部设置一个
include_dir
变量,然后在设置可执行文件的target_include_directories
时使用它。3.包括来自源文件的头文件。
使用相对于
include/${PROJECT_NAME}
的路径。