标签: cmake

无法让 cmake 链接到 GLFW 库

我正在尝试使用 GLFW 编写 OpenGL 应用程序。文件结构如下

-USG
 -build
 -include
   -glfw-3.3
 -src
   -CMakeLists.txt
   -main.cpp
 -CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

USG文件中的CMake如下。

cmake_minimum_required(VERSION 3.0)
project(USG)

#--------------------------------------------------------------------
# Set GLFW variables
#--------------------------------------------------------------------
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)

#--------------------------------------------------------------------
# Add subdirectories
#--------------------------------------------------------------------
add_subdirectory(include/glfw-3.3)
add_subdirectory(src)
Run Code Online (Sandbox Code Playgroud)

src文件中的CMakeLists如下

add_executable(usg main.cpp)

set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)

if (OPENGL_FOUND)
    target_include_directories(usg PUBLIC ${OPENGL_INCLUDE_DIR})
    target_link_libraries(usg ${OPENGL_gl_LIBRARY})
endif()

target_link_libraries(usg glfw)
Run Code Online (Sandbox Code Playgroud)

我在 build 文件夹中运行,cmake ../然后运行make。运行 cmake 会按预期运行。运行 make 构建 …

c++ opengl cmake glfw

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

从 CMake 创建 Visual Studio 项目,Visual Studio 找不到可执行文件

基本上,我遇到了与如何配置 CMake 以便生成的 Visual Studio 项目找到可执行文件中相同的问题 . 那里的答案都不适合我。

我有一个 CMake 项目,我只想从中创建一个 Visual Studio 2019 项目:

  • 所以我只是cmake .从根目录运行。
  • 然后我的根目录中有一个 *.sln 文件。

  • 使用 Visual Studio 2019 打开它后,我按下“Local Widows Debugger”按钮,它编译成功,但随后 IDE 抱怨:

    Unable to start program 'C:\Users...\x64\Debug\ALL_BUILD'. The system is unable to find the specified file.
    
    Run Code Online (Sandbox Code Playgroud)

使用 travis 一切都很好编译:https : //travis-ci.com/Necktschnagge/markov_chain_analyzer/builds/144941090

你可以在这里看到代码:https : //github.com/Necktschnagge/markov_chain_analyzer/tree/old

我需要做什么才能让 CMake 创建一个配置良好的 VS 解决方案,以便我可以运行调试器?

c++ cmake visual-studio

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

链接器错误:无法解析构造函数

cpp 新手。奇怪的是,我实际上在前一天设法编译了它。但是今天突然没有编译,可能是因为一些缓存。清除 CMake 缓存后,我开始收到各种错误...

我定义了一个类,如:

#pragma once

#include <string>
#include <memory>

#include <boost/uuid/uuid.hpp>

#include "lib/Msg.hpp"
#include "lib/SplitParts.hpp"

namespace blz
{
    class SmsMsg : Msg
    {
    public:
        enum class SmsCoding { Undefined = -1, SevenBit, EightBit, Ucs2 };

        enum class DcsEncodeMode { Undefined = -1, Default, Fx };

        enum class Mwi { Undefined = -1, VoiceOn, FaxOn, EmailOn, OtherOn, VoiceOff, FaxOff, EmailOff, OtherOff };

        enum class Mclass { Undefined = -1, Zero, One, Two, Three };

        SmsMsg(boost::uuids::uuid id, int smsType, std::string& …
Run Code Online (Sandbox Code Playgroud)

c++ cmake c++11

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

为多个目标(CMake)重用变量中的 target_compile_options

我有几个构建目标,并希望设置相同的编译选项集,如下所示:

set(app_compile_options "-Wall -Wextra -Wshadow -Wnon-virtual-dtor \
    -Wold-style-cast \
    -Woverloaded-virtual -Wzero-as-null-pointer-constant \
    -pedantic -fPIE -fstack-protector-all -fno-rtti")

add_executable(foo foo.cpp)
target_compile_options(foo PUBLIC ${app_compile_options})

add_executable(bar bar.cpp)
target_compile_options(bar PUBLIC ${app_compile_options})
Run Code Online (Sandbox Code Playgroud)

编译时出现以下错误:

error: unrecognized command line option ‘-Wall -Wextra -Wshadow -Wnon-virtual-dtor -Wold-style-cast     -Woverloaded-virtual -Wzero-as-null-pointer-constant     -pedantic -fPIE -fstack-protector-all -fno-rtti’
Run Code Online (Sandbox Code Playgroud)

我是否需要另一种格式或特殊语法来定义变量中的编译选项?

cmake

1
推荐指数
2
解决办法
407
查看次数

CMake - Eigen3_DIR-NOTFOUND

我正在尝试在 Windows 10 上使用 CMake 构建一个项目。但是我几个小时一直收到这个错误:

错误:

  CMake Error at of_dis/CMakeLists.txt:8 (FIND_PACKAGE):
  By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Eigen3", but
  CMake did not find one.

  Could not find a package configuration file provided by "Eigen3" with any
  of the following names:

    Eigen3Config.cmake
    eigen3-config.cmake

  Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
  "Eigen3_DIR" to a directory containing one of the above files.  If "Eigen3"
  provides a …
Run Code Online (Sandbox Code Playgroud)

cmake eigen3

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

CMake 和 GMake 有什么区别?

我目前正在从事一个需要我了解 CMake 和 GMake 的项目。我读过他们,但仍然没有得到他们的申请。

有人可以提供一些关于如何在软件开发中使用 CMake 和 GMake 的例子吗?

谢谢你。

c c++ cmake gnu-make

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

使用 CMake 添加 C++ 编译器标志

我对整个 CMake 逻辑和语法很陌生。对于我正在处理的代码,我需要使用该cap_set_proc函数来处理进程功能标志 ( man link )。所以我决定从你在这里看到的一段非常愚蠢的代码开始:

#include<iostream>
#include<string>
#include<sys/capability.h>

using namespace std;

int main(){

    cap_t test = cap_get_proc();
    string whatsTest(cap_to_text(test,nullptr));
    cout<<whatsTest<<endl;

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

(目前,我不在乎我写的代码是否有意义......)
现在,如果我只是使用c++(如下所示)一切都可以正常编译并且可执行文件运行没有任何问题:

c++ test_main.cpp -o test_cap -lcap
Run Code Online (Sandbox Code Playgroud)

问题是我正在工作的项目非常庞大,并且非常依赖 CMake。所以我想编译相同的代码,但使用 CMake... 我如何编写一个 CMakeLists.txt 文件,让我获得与前几行中显示的编译器指令相同的结果?

c++ cmake

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

如何在cmake中的源文件后设置库标志?

我正在尝试使用CMake使用hwloc编译项目.但是,链接时我收到大量未定义的引用错误:

undefined reference to `hwloc_get_type_depth'
undefined reference to `hwloc_bitmap_zero'
[...]
Run Code Online (Sandbox Code Playgroud)

根据对类似问题的回答,标志的顺序很重要.

那么,我如何在CMake中生成这样的命令?:

g++ -Wall -std=c++11 source.cpp-lhwloc

摘自我的CMakeLists.txt:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11 -lhwloc")

set(SOURCE_FILES source.cpp)
add_executable(source ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

编辑:我的问题,提出了作为一个可能重复这一块,但是我想补充的旗子是为似乎是在上面提到的问题的情况下对一个库,而不是链接正常编译标志.@Edgar Rokyan为我的问题提供了正确的答案.

c++ cmake c++11

0
推荐指数
1
解决办法
599
查看次数

打印完整的CMake项目CFLAGS / CXXFLAGS

是否可以打印出完整的*CFLAGS*CXX_FLAGS一个CMake的项目(所有目标的?)?

CMakeCache.txt在配置和构建项目后尝试查找,但是所有*C*FLAGS*相关变量几乎为空,并且无论如何都不包含我的项目设置,例如-D-I依赖项特定的标志。

为什么我要这样做?为了为完成clang的vim插件创建配置文件,请执行以下操作:https ://vim.sourceforge.io/scripts/script.php?script_id =3302

cmake clang-complete

0
推荐指数
3
解决办法
2583
查看次数

如何将正确的库与GLFW链接为cmake中的外部项目?

我包括这样的glfw:

ExternalProject_Add(glfw-external
  URL https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip
  PREFIX ${CMAKE_CURRENT_BINARY_DIR}/glfw
  INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/install
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
)

add_dependencies(ShittyLife glfw-external)

if(UNIX)
  set(GLFW_LIB <What to put here?> libglfw3.a)
else()
  set(GLFW_LIB ${install_dir}/lib/glfw3.lib)
endif()
Run Code Online (Sandbox Code Playgroud)

稍后使用GLFW_LIB变量链接lib.

它在Windows上运行良好,但在Linux上我缺少一些库.glfw网页提供了解决方案,但它们似乎都没有与ExternalProject_add的兼容性.

关于如何弄清楚所需的库是什么的任何想法,最好是以跨不同机器/发行版的方式工作?

如果它有用,这是我在尝试构建时遇到的错误:

相关位:

/usr/bin/ld: /home/molion/Desktop/ShittyLife/build/install/lib/libglfw3.a(x11_window.c.o): undefined reference to symbol 'XConvertSelection'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
Run Code Online (Sandbox Code Playgroud)

所有的:

[ 94%] Building CXX object CMakeFiles/ShittyLife.dir/src/main.cpp.o
[100%] Linking CXX executable ShittyLife
/usr/bin/ld: /home/molion/Desktop/ShittyLife/build/install/lib/libglfw3.a(x11_window.c.o): undefined reference to symbol 'XConvertSelection'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status …
Run Code Online (Sandbox Code Playgroud)

c++ cmake glfw

0
推荐指数
1
解决办法
1095
查看次数

标签 统计

cmake ×10

c++ ×7

c++11 ×2

glfw ×2

c ×1

clang-complete ×1

eigen3 ×1

gnu-make ×1

opengl ×1

visual-studio ×1