将生成文件转换为 CMakeLists.txt等效项
Converting a Makefile into CMakeLists.txt equivalent
>我正在做一个项目,如果我维护一个CMakeLists.txt文件,以便在需要编译时跟踪依赖项。
我最近开始使用一个新的库,我需要将其集成到我的项目中。该库附带了一些有关如何编译的示例,但这纯粹是一个 Makefile。我想将 Makefile 的逻辑集成到项目的 CMakeLists.txt 文件中。
此库的生成文件如下所示:
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
如果可能的话.txt我想将此生成文件转换为CMakeLists。我看到它们为线程(pthread
(提供了一些标志,我想将这些标志和设置保留在我的CMakeList中.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 .)
所以我试图定义一个类似于 Makefile 中的COMMON
的变量mujocoCommon
以及我在 CMakeinclude_directories
中使用的Mujoco_INCLUDE_DIRS
。
请注意,在myproject.cpp
中,我有MuJoCo代码和其他需要正确链接的依赖项。在Makefile中,事情看起来更简单一些,因为在那里代码只有MuJoco依赖项。
我需要一些关于如何在我的 CMakeList 中添加的提示.txt以下内容:
-mavx -pthread -Wl,-rpath,'$$ORIGIN'
Makefile 的 COMMON 变量的一部分。-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和CMakeList中的知识知之甚少.txt当我使用"make"进行编译时,我遇到了许多此类错误:
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_link_libraries
.不要将它们与-l
.
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- CMakeLists.txt中的命名空间表示法
- 将生成文件转换为 CMakeLists.txt等效项
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- 直接传递编译选项(绕过 CMakeLists.txt)
- 如何在 CMakeLists.txt Qt Creator 中包含头文件?
- 了解编写 CMakeLists.txt
- 如何制作 cmakelists.txt编译使用在其他地方声明和实现的函数和类的 CPP
- 将目录添加到没有 CMakeLists.txt 的 CMake 项目
- 如何在 CMakeLists.txt for Visual Studio 2019 中启用 clang-tidy?
- CMakeLists.txt structure
- 在CMakeLists中包含目录的更好方法.txt
- CMakeLists.txt:(add_executable):没有给目标提供来源:教程
- 如何将opencv包添加到CMakelists.txt
- 如何在不更改CMakeLists.txt的情况下(可能通过CLI)将CFLAGS和CXXFLAGS传递给cmake
- 如何在CMakeLists.txt中正确设置CMake标志
- 如何为 UnitTest++ 项目编写 CMakeLists.txt 文件
- 设置诊断:插入符号来自 CMakeLists.txt
- cmake find_package CMakeLists.txt 子文件夹中的相对路径
- 在cmakelists.txt中链接GSL