Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将生成文件转换为等效的CMakeLists.txt_C++_Makefile_Cmake - Fatal编程技术网

C++ 将生成文件转换为等效的CMakeLists.txt

C++ 将生成文件转换为等效的CMakeLists.txt,c++,makefile,cmake,C++,Makefile,Cmake,我正在做一个项目,我维护了一个CMakeLists.txt文件,以便在需要编译时跟踪依赖项 我最近开始使用一个新的库,我需要将它集成到我的项目中。该库附带了一些关于如何编译的示例,但这纯粹是一个生成文件。我想将Makefile的逻辑集成到我的项目的CMakeLists.txt文件中 此库的Makefile如下所示: COMMON=-O2 -I/home/john/.mujoco/mjpro200/include -L/home/john/.mujoco/mjpro200/bin -std=c++

我正在做一个项目,我维护了一个CMakeLists.txt文件,以便在需要编译时跟踪依赖项

我最近开始使用一个新的库,我需要将它集成到我的项目中。该库附带了一些关于如何编译的示例,但这纯粹是一个生成文件。我想将Makefile的逻辑集成到我的项目的CMakeLists.txt文件中

此库的Makefile如下所示:

COMMON=-O2 -I/home/john/.mujoco/mjpro200/include -L/home/john/.mujoco/mjpro200/bin -std=c++11 -mavx -pthread -Wl,-rpath,'$$ORIGIN'

all:
    g++ $(COMMON) basic.cpp      -lmujoco200 -lGL -lglew /home/john/.mujoco/mjpro200/bin/libglfw.so.3 -o basic
    gcc -c -O2 -mavx -I/home/john/.mujoco/mjpro200/include /home/john/.mujoco/mjpro200/include/uitools.c
    rm *.o
如果可能的话,我想将这个Makefile转换成CMakeLists.txt。我看到它们为线程提供了一些标志(
pthread
),我想在我的CMakeLists.txt中保留这些标志和设置,以防性能需要它们

这是我的CMakeLists.txt:

cmake_minimum_required (VERSION 2.6.0)
project(myproject)
add_compile_options(-std=c++11) # CMake 2.8.12 or newer

if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
  add_definitions("-fno-strict-aliasing -Wall")
endif( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )

# optional in case boost is used
find_package(Boost 1.58 EXACT)
find_package(Eigen REQUIRED)

set(mujocoCommon "-O2 -I/home/john/.mujoco/mjpro200/include -L/home/john/.mujoco/mjpro200/bin -std=c++11 -mavx -pthread -Wl,-rpath,'$$ORIGIN'")

set(Mujoco_INCLUDE_DIRS "/home/john/.mujoco/mjpro200/include")

include_directories(${Boost_INCLUDE_DIRS} ${Eigen_INCLUDE_DIRS} ${Mujoco_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
add_executable(myproject mycode.cpp)
install(TARGETS myproject DESTINATION .)
因此,我尝试定义一个变量
mujocoCommon
,类似于Makefile中的
COMMON
,以及
Mujoco\u INCLUDE\u DIRS
,然后在CMake的
INCLUDE\u目录中使用

请注意,在
myproject.cpp
中,我有MuJoCo代码和其他需要正确链接的依赖项。在Makefile中,事情看起来更简单一些,因为其中的代码只有MuJoco依赖项

我需要了解如何在我的CMakeLists.txt中添加以下内容:

  • -mavx-pthread-Wl,-rpath,$$ORIGIN'
    Makefile公共变量的一部分
  • -lmujoco200-lGL-lglew/home/john/.mujoco/mjpro200/bin/libglfw.so.3
  • -c-O2-mavx-I/home/john/.mujoco/mjpro200/include/home/john/.mujoco/mjpro200/include/uitools.c
目前,我对CMake的了解很少,在使用“make”编译时,我在我的CMakeLists.txt中有很多类似的错误:

myproject.cpp:(.text+0xfa9): undefined reference to `glfwSetMouseButtonCallback'
基本上,我想把(?)我的代码和MuJoco库链接起来,就像在它们的Makefile中一样

谢谢

编辑 关于可能的重复标志,我添加了以下标志:

set(Mujoco_LIBRARIES "/home/john/.mujoco/mjpro200/bin")
target_link_libraries(myproject ${Mujoco_LIBRARIES} -lboost_system)
但这并没有解决问题

编辑2:

我还补充了这一点:

set(CMAKE_CXX_FLAGS "-lmujoco200 -lGL -lglew /home/john/.mujoco/mjpro200/bin/libglfw.so.3")
我得到的错误是:

/usr/bin/x86_64-linux-gnu-ld: cannot find -lmujoco200
/usr/bin/x86_64-linux-gnu-ld: cannot find -lglew

您还需要将opengl库添加到链接库中,
target\u link\u libraries
。不要用
-l
添加它们

makefile的可能副本具有
-lgl
-lglew
标志。我在您的
CMakeLists.txt
中看不到它们(及其等效项)。(建议:将您的任务拆分,以便将Makefile转换为较小的任务。然后通过google/搜索每个小任务的相关信息。如果您无法解决某些小任务,请在堆栈溢出时询问有关此特定任务的信息。)另请参阅。我相信它涵盖了使用Makefile构建库,然后将其导入到项目中的情况。此外,如果您使用
-Wl,-RPATH,
设置RPATH,那么您通常希望在具有ELF二进制文件的较新系统上使用
-Wl,-enable new dtags