将简单的 makefile 转换为 CMakeLists.txt?
Posted
技术标签:
【中文标题】将简单的 makefile 转换为 CMakeLists.txt?【英文标题】:Converting simple makefile into CMakeLists.txt? 【发布时间】:2019-08-12 01:36:46 【问题描述】:我正在尝试将这个简单的 makefile 转换为 CMakeLists.txt。我特别为这些标志而苦苦挣扎。
SOURCE = triangle.cpp shader.cpp
CC = g++
CFLAGS = -Wall -Wextra -pedantic -framework OpenGL -framework GLUT -lGLEW -lglfw
OBJECT = window
default:
$(CC) -o $(OBJECT) $(SOURCE) $(CFLAGS)
clean:
rm -f $(OBJECT)
这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project(Graphics)
set(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -framework OpenGL -framework GLUT -lGLEW -lglfw")
#add_definitions($CMAKE_CXX_FLAGS)
add_executable(
trtangle
triangle.cpp
)
这是我收到的错误消息:
Scanning dependencies of target triangle
[ 50%] Building CXX object CMakeFiles/triangle.dir/triangle.cpp.o
clang: warning: -framework OpenGL: 'linker' input unused [-Wunused command-line-argument]
clang: warning: -framework GLUT: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -lGLEW: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -lglfw: 'linker' input unused [-Wunused-command-line-argument]
/Users/neilculbertson/Desktop/OpenGL/triangle.cpp:2:10: fatal error: 'GL/glew.h' file not found
#include <GL/glew.h>
^~~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/triangle.dir/triangle.cpp.o] Error 1
make[1]: *** [CMakeFiles/triangle.dir/all] Error 2
make: *** [all] Error 2
我也尝试过设置 CMAKE_C_FLAGS 但仍然没有运气。请记住,当我单独使用 makefile 时,一切都可以编译并完美运行。我想知道这是否是一个GL错误?还是我奇怪地安装了 GLEW?
【问题讨论】:
【参考方案1】:cmake
cmake_minimum_required(VERSION 3.0) # This line is required
project(triangle) # This line is required
制作
CC = g++
CFLAGS = -Wall -Wextra -pedantic -framework OpenGL -framework GLUT -lGLEW -lglfw
cmake
set(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -framework OpenGL -framework GLUT -lGLEW -lglfw")
制作
SOURCE = triangle.cpp shader.cpp
default:
$(CC) -o $(OBJECT) $(SOURCE) $(CFLAGS)
cmake
# The name of the result and all required sources
add_executable(triangle triangle.cpp shader.cpp)
# These libraries are required
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
find_package(glfw3 3.0 REQUIRED)
# ... and the path to the header files and so files
target_include_directories(triangle $OPENGL_INCLUDE_DIRS $GLEW_INCLUDE_DIRS)
target_link_libraries(triangle $OPENGL_LIBRARIES $GLEW_LIBRARIES glfw3)
其他可能性是首先收集列表中的所有来源。
set(SOURCES triangle.cpp shader.cpp)
add_executable(triangle $SOURCES)
制作
OBJECT = window
cmake
没有必要制作
clean:
rm -f $(OBJECT)
cmake
这是内置的。【讨论】:
这行不通。您需要先创建目标,然后应用target_include_directories
或target_link_libraries
命令。
我会重做的。但这使得将其与 make 文件进行比较变得更加困难。
而不是设置CMAKE_CXX_FLAGS
,CMake 更喜欢你使用add_compile_options()(和add_compile_definitions(),如果你需要的话)。
...而target_compile_options() 也可用于为目标设置它们。【参考方案2】:
cmake_minimum_required(VERSION 3.0)
project(Graphics)
add_executable(
trtangle
triangle.cpp
)
target_compile_options(trtangle PRIVATE -Wall -Wextra -pedantic)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
find_package(glfw3 3.3 REQUIRED)
target_include_directories(trtangle $OPENGL_INCLUDE_DIRS $GLEW_INCLUDE_DIRS)
target_link_libraries(trtangle $OPENGL_LIBRARIES $GLEW_LIBRARIES glfw)
【讨论】:
不起作用。起初,CMake 抱怨 target_include_directories 的参数数量,所以我把 PUBLIC 放在那里: target_include_directories(triangle PUBLIC $OPENGL_INCLUDE_DIRS $GLEW_INCLUDE_DIRS) 但我仍然收到同样的错误,说它找不到以上是关于将简单的 makefile 转换为 CMakeLists.txt?的主要内容,如果未能解决你的问题,请参考以下文章