[CMake] Assembler files
Brad King
brad.king at kitware.com
Wed May 31 18:04:27 EDT 2006
James Mansion wrote:
> I'd like to create a library from a mix of
> assembler and C files.
>
> I'm reading the book to try to determine how
> to achieve this. There seems to be perhaps two
> possible approaches.
>
> (Initially this is for Win32, and I have files for NASM
> and MASM with extensions .nasm and .masm)
>
> 1) define new languages for NASM and MASM.
>
> The example in the book (Fortran) suggests that I then need to
> enable the language in the PROJECT declaration, though the
> section on PROJECT suggests that all languages are enabled
> by default. (?) Presumably I'm safe if I use ENABLE_LANGUAGE?
>
> Then I would just use ADD_LIBRARY (foo a.c b.nasm c.masm).
>
> Is that right?
This is mostly right, but currently there is no NASM or MASM language.
You have to look at all the *Fortran*.cmake files in the Modules
directory. Create similar ones for NASM and MASM in some directory in
your project, say myproj/CMake. Then in myproj/CMakeLists.txt do
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake)
PROJECT(MYPROJ C NASM MASM)
Note the above is from memory so it may need some tweaking.
> 2) Define a whole set of custom commands that create an object
> file:
>
> SET( MASM_SOURCES b1.masm b2.masm )
> FOREACH( SRC ${MASM_SOURCES} )
> ADD_CUSTOM_COMMAND(TARGET <obj for ${SRC}>
> PRE_LINK
> COMMAND masm ${SRC}
> )
> ENDFOREACH( SRC )
>
> ADD_LIBRARY( foo a.c b1.obj b2.obj )
>
> Is that right?
Try something like
SET(MASM_NAMES b1 b2)
FOREACH(src ${MASM_NAMES})
SET(MASM_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${src}.masm)
SET(MASM_OBJ ${CMAKE_CURRENT_BINARY_DIR}/${src}.obj)
ADD_CUSTOM_COMMAND(
OUTPUT ${MASM_OBJ}
DEPENDS ${MASM_SRC}
COMMAND masm ${MASM_SRC} -o${MASM_OBJ}
)
SET(MASM_OBJECTS ${MASM_OBJECTS} ${MASM_OBJ})
ENDFOREACH(src)
ADD_LIBRARY(foo a.c ${MASM_OBJECTS})
-Brad
More information about the CMake
mailing list