2013-05-20 4 views
11

Я пытаюсь преобразовать старый код 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 

Спасибо!

ответ

18

Давайте попробуем сопоставить 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 за дополнительной информацией, так как он достаточно пояснительный и полный.