[CMake] Questions on build lua source code with cmake

Eric Wing ewmailing at gmail.com
Wed Nov 7 21:04:51 EST 2012


On 11/4/12, lzprgmr <baiyanhuang at gmail.com> wrote:
> Hi, All
>
> After going through the cmake examples, I decide trying build lua with
> cmake to get a better understanding, and got some questions.
>

Multiple people have written CMake descriptions to build Lua. I posted
my own here awhile back:
http://playcontrol.net/ewing/jibberjabber/git_superproject_and_submod.html



> * It seems to me cmake are best work with source code with consistent
> structure of its targets. in my case, I have to define all my targets
> in one CMakeLists.txt file, the problem I can see is the property I
> set for 1st target (one example is the macro definition:
> -D_CRT_SECURE_NO_WARNINGS ) will also applies to the 2nd, which is not
> expected. is there a way to avoid this?

set_target_properties lets you specify attributes on a target basis so
it doesn't need to be global.

SET_TARGET_PROPERTIES(lua_library_static PROPERTIES COMPILE_FLAGS
"${LUA_C_FLAGS}")


> * Here the final target name for the lua library and lua interpreter
> are liblua.a and lua (in linux), because here I can't name both
> library and executable as "lua", I would hope there is a way for me to
> rename the target, like:
>       add_library(lualib targetname=lua)
>   and then I can depends on it using the project name:
>       target_link_libraries(lua lualib)
>  Is it possible to achieve this in cmake?


Yes it is. This is in my example:
ADD_EXECUTABLE(lua_executable ${Lua_SOURCE_DIR}/src/lua.c)
TARGET_LINK_LIBRARIES(lua_executable lua_library_static ${LUA_LINKER_FLAGS})
# Makes the executable name "lua"
SET_TARGET_PROPERTIES(lua_executable PROPERTIES OUTPUT_NAME "lua")


>
> * I guard platform specific setting using if(${CMAKE_SYSTEM_NAME}
> STREQUAL "Linux"), which seems quite tedious to me, is there a neat
> way to do so?

There are some built in ones like:
IF(APPLE)
ELSEIF(UNIX)
ELSEIF(WIN32)
ENDIF()

Still tedious, but sometimes necessary. But be careful what you pick
vs. what you actually mean. For example, do you really mean "Linux" or
do you mean UNIX? (Also a corner case is that APPLE is also UNIX and
using Cygwin on Windows might also give you UNIX.)


-Eric
-- 
Beginning iPhone Games Development
http://playcontrol.net/iphonegamebook/


More information about the CMake mailing list