将旧的makefile转换为CMake

The*_*ger 12 c c++ makefile cmake

我正在尝试将旧的makefile代码转换为CMake.你能帮助我吗?这是我目前陷入困境的部分.我不知道如何将这些参数传递给编译器.

COMPILE_FLAGS = -c -m32 -O3 -fPIC -w -DSOMETHING -Wall -I src/sdk/core

ifdef STATIC
    OUTFILE = "bin/test_static.so"
    COMPILE_FLAGS_2 = ./lib/ABC.a
else
    OUTFILE = "bin/test.so"
    COMPILE_FLAGS_2 = -L/usr/lib/mysql -lABC
endif

all:
    g++ $(COMPILE_FLAGS) src/sdk/*.cpp
    g++ $(COMPILE_FLAGS) src/*.cpp
    g++ -fshort-wchar -shared -o $(OUTFILE) *.o $(COMPILE_FLAGS_2)
    rm -f *.o
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mas*_*ano 19

让我们尝试将Makefile语法映射到CMake:

COMPILE_FLAGS = -c -m32 -O3 -fPIC -w -DSOMETHING -Wall -I src/sdk/core
Run Code Online (Sandbox Code Playgroud)

该声明直接映射到:

SET( COMPILE_FLAGS "-c -m32 -O3 -fPIC -w -DSOMETHING -Wall" )
INCLUDE_DIRECTORIES( src/sdk/core )
Run Code Online (Sandbox Code Playgroud)

条件类型:

ifdef STATIC
  # Do something
else
  # Do something else
endif
Run Code Online (Sandbox Code Playgroud)

以这种方式翻译成CMake:

OPTION(STATIC "Brief description" ON)
IF( STATIC )
  # Do something
ELSE()
  # Do something else
ENDIF()
Run Code Online (Sandbox Code Playgroud)

要修改默认的编译选项可以设置变量CMAKE_<LANG>_FLAGS_RELEASE,CMAKE_<LANG>_FLAGS_DEBUG等等,适当地.

最后,可执行文件的编译需要您使用该ADD_EXECUTABLE命令,许多CMake教程中对此进行了解释.

在任何情况下,我建议您参考在线文档以获取更多详细信息,因为它非常具有说明性和完整性.