2013-05-20 69 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_RELEASECMAKE_<LANG>_FLAGS_DEBUG等。

最后编译一个可执行文件需要你使用ADD_EXECUTABLE命令,这在很多CMake教程中都有介绍。

在任何情况下,我建议您参考在线documentation了解更多详情,因为它非常具有解释性和完整性。