gcc (GCC) 4.7.2
cmake version 2.8.11
您好,
我想知道是否有解决以下问题的方法。我在下面强调了:
SET(GW_SOURCE_FILES
module.c
module_imp.c
module_message.c
module_config.c
module_queue.c)
# Compiles the source files to create the shared library called dlg_gw.so
ADD_LIBRARY(dlg_gw SHARED ${GW_SOURCE_FILES})
# Link additional libraries to this
TARGET_LINK_LIBRARIES(dlg_gw gc srl ${APRUTIL})
# ISSUE: Now I want to create my executable using the same source files. module.c is where my 'void main(void)' is.
# However, I have some functions in there which will also be part of the library.
# However, this will recompile the same source files all over again. I don't really like that behaviour.
ADD_EXECUTABLE(sun_gw ${GW_SOURCE_FILES})
# After the executable is created, link the libraries with it.
TARGET_LINK_LIBRARIES(sun_gw ${APR} driver dlg_gw dlg_sip dlg_ss7 dlg_isdn)
我希望你能看到上面的问题,因为我正在编译两次相同的源文件。一旦创建dlg_gw
库。然后再次创建可执行文件sun_gw
。
我正在考虑取出'void main(void)'并将其放在一个名为runtime.c的新文件中,然后执行以下操作:
ADD_EXECUTABLE(sun_gw runtime.c)
但是上面要求我改变一些源代码。
非常感谢任何其他建议,
答案 0 :(得分:5)
CMake 2.8.8中引入的“OBJECT”库类型可用于避免重复构建相同的文件。