我正在尝试使用 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 构建 …
基本上,我遇到了与如何配置 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 解决方案,以便我可以运行调试器?
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) 我有几个构建目标,并希望设置相同的编译选项集,如下所示:
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)
我是否需要另一种格式或特殊语法来定义变量中的编译选项?
我正在尝试在 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 和 GMake 的项目。我读过他们,但仍然没有得到他们的申请。
有人可以提供一些关于如何在软件开发中使用 CMake 和 GMake 的例子吗?
谢谢你。
我对整个 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 文件,让我获得与前几行中显示的编译器指令相同的结果?
我正在尝试使用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为我的问题提供了正确的答案.
我包括这样的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)