Подтвердить что ты не робот

Преобразование старого make файла в 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

Спасибо!

4b9b3361

Ответ 1

Попробуйте сопоставить синтаксис Makefile с CMake:

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

Это утверждение непосредственно сопоставляется с:

SET( COMPILE_FLAGS "-c -m32 -O3 -fPIC -w -DSOMETHING -Wall" )
INCLUDE_DIRECTORIES( src/sdk/core )

Условие типа:

ifdef STATIC
  # Do something
else
  # Do something else
endif

переводится в CMake таким образом:

OPTION(STATIC "Brief description" ON)
IF( STATIC )
  # Do something
ELSE()
  # Do something else
ENDIF()

Чтобы изменить флаги компиляции по умолчанию, вы можете установить переменные CMAKE_<LANG>_FLAGS_RELEASE, CMAKE_<LANG>_FLAGS_DEBUG и т.д., соответственно.

Наконец, компиляция исполняемого файла требует использования команды ADD_EXECUTABLE, что объясняется во многих учебниках CMake.

В любом случае я предлагаю вам обратиться к онлайн-сервису documentation для получения более подробной информации, так как он достаточно пояснительный и полный.