【问题标题】:Converting simple makefile into CMakeLists.txt?将简单的 makefile 转换为 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?

【问题讨论】:

    标签: makefile cmake compiler-flags


    【解决方案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_directoriestarget_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}) 但我仍然收到同样的错误,说它找不到 顺便说一句,感谢您的帮助!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多