首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使cmake成功构建它,也无法“生成”项目。

即使cmake成功构建它,也无法“生成”项目。
EN

Stack Overflow用户
提问于 2021-12-28 00:38:59
回答 1查看 106关注 0票数 0

我在做一个我需要用利伯钠的项目。我已经成功地将它包含在我的CMakeLists.txt文件中,如下所示:

CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.0.0)

project(skip-list)

set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "/usr/local/include/sodium" "/usr/local/lib/**")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")

find_package(Sodium REQUIRED)

add_executable(skip-list main.c)
target_include_directories(skip-list PRIVATE ${Sodium_INCLUDE_DIRS})
target_link_libraries(skip-list PRIVATE ${Sodium_LIBS})

我的目录树结构如下所示:

代码语言:javascript
复制
-.vscode
  -settings.json
-build
  -everything cmake autogenerates
-src
  -cmake
    -all my cmake module files, i.e. FindSodium.cmake
  -main.c
  -CMakeLists.txt

我的main.c非常简单,因为我只是想让库包含工作,但我列出了以下内容:

代码语言:javascript
复制
#include <sodium.h>
#include <stdio.h>

int main() {
  printf("here");
  if (sodium_init() < 0) {
    printf("error");
  } else {
    printf("%d\n", sodium_init());
  }
  printf("other side");
  return 0;
}

这方面的产出如下:

here1另一边

如人们所料

什么起作用:

  • 当我从构建目录运行cmak.src时,构建成功,生成一个Makefile。*

如果我运行并运行beautifully.,那么我的程序将运行

如果我在

  • 上使用#include <sodium.h>,我成功地被带到/usr/local/ cmd+click目录中的sodium.h文件中,并且正在接收intellisense,所以我相对确定库本身已经成功地安装在我的计算机上。

不起作用的是:

    • when我在构建目录中运行make,得到以下output:

代码语言:javascript
复制
[ 50%] Building C object CMakeFiles/skip-list.dir/main.c.o
/Users/anishsinha/Sandbox/skip-list/src/main.c:1:10: fatal error: 'sodium.h' file not found
#include <sodium.h>
         ^~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/skip-list.dir/main.c.o] Error 1
make[1]: *** [CMakeFiles/skip-list.dir/all] Error 2
make: *** [all] Error 2

本质上,我得到的是找不到文件,但我不明白为什么要修复,或者如何修复它,因为据我所见,当我从命令行编译时,sodium.h是正确的,而cmak.src是成功的,没有错误。

如果有人能对这个问题有所了解的话,我将非常感激。如果你回答或试图回答这个问题,谢谢你抽出时间。

EN

回答 1

Stack Overflow用户

发布于 2021-12-28 02:21:20

以下是我错过的解决方案:

TL.DR i使用了错误的变量

在Findsodium.cmake文件中,运行之后,它定义了以下四个变量:

代码语言:javascript
复制
#   sodium_FOUND
#   sodium_INCLUDE_DIR
#   sodium_LIBRARY_DEBUG
#   sodium_LIBRARY_RELEASE

我使用的是sodium_INCLUDE_DIRS和sodium_LIBS,这是我之前使用的OpenCV库的约定。当我切换到使用sodium_INCLUDE_DIR和sodium_LIBRARY_RELEASE时,make成功地工作了,并且可执行文件成功地链接到库中。

这是我最后一个工作的CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.0.0)

project(skip-list)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")

find_package(Sodium REQUIRED)

add_executable(skip-list main.c)
target_include_directories(skip-list PUBLIC ${sodium_INCLUDE_DIR})
target_link_libraries(skip-list PUBLIC ${sodium_LIBRARY_RELEASE})

message("DIRS: ${sodium_INCLUDE_DIR}")
message("LIBS: ${sodium_LIBRARY_RELEASE}")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70501733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档