annotate cmake/MolkoDefineExecutable.cmake @ 263:cd5bdb995052

cmake: create a new libmlk-data library
author David Demelier <markand@malikania.fr>
date Tue, 08 Dec 2020 17:00:03 +0100
parents 97f55f6b9593
children 9bbbabb6f077
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 #
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 # MolkoDefineTest.cmake -- CMake build system for molko
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 # Copyright (c) 2020 David Demelier <markand@malikania.fr>
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 #
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 # Permission to use, copy, modify, and/or distribute this software for any
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 # purpose with or without fee is hereby granted, provided that the above
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 # copyright notice and this permission notice appear in all copies.
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 #
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 #
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
19 #
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
20 # # molko_define_executable
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
21 #
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
22 # Create an executable.
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
23 #
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
24 # ## Synopsis
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
25 #
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
26 # ```cmake
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
27 # molko_define_test(
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
28 # TARGET target name
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
29 # SOURCES src1, src2, srcn
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
30 # FOLDER (Optional) IDE folder if supported
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
31 # TRANSLATIONS (Optional) list of translations
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
32 # ASSETS (Optional) list of assets to build
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
33 # FLAGS (Optional) C flags (without -D)
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
34 # LIBRARIES (Optional) libraries to link
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
35 # INCLUDES (Optional) includes
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 245
diff changeset
36 # INSTALL (Optional) create install target
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
37 # )
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
38 # ```
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
39 #
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
40 # Create an executable with the name *TARGET* with the given *SOURCES*.
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
41 #
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
42 # Optional include paths, libraries and flags can be specified via *INCLUDES*,
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
43 # *LIBRARIES* and *FLAGS* arguments respectively.
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
44 #
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
45 # If argument *ASSETS* is set, they are generated in the target binary
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
46 # directory.
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
47 #
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
48 # The optional argument *TRANSLATIONS* should contain a list of supported
243
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
49 # translations. See molko_build_translations for more info.
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
50 #
71b3b7036de7 misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents: 242
diff changeset
51
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 include(${CMAKE_CURRENT_LIST_DIR}/MolkoBuildAssets.cmake)
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
53 include(${CMAKE_CURRENT_LIST_DIR}/MolkoBuildTranslations.cmake)
221
d51d9c0c2186 misc: some cleanup
David Demelier <markand@malikania.fr>
parents: 125
diff changeset
54 include(${CMAKE_CURRENT_LIST_DIR}/MolkoSetCompilerFlags.cmake)
242
4c24604efcab cmake: create build hierarchy similar to install, closes #2518 @1h
David Demelier <markand@malikania.fr>
parents: 241
diff changeset
55 include(${CMAKE_CURRENT_LIST_DIR}/MolkoSetBuildDirectories.cmake)
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 function(molko_define_executable)
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 245
diff changeset
58 set(options INSTALL)
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 set(oneValueArgs FOLDER TARGET)
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
60 set(multiValueArgs ASSETS FLAGS INCLUDES LIBRARIES SOURCES TRANSLATIONS)
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 cmake_parse_arguments(EXE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 if (NOT EXE_TARGET)
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 message(FATAL_ERROR "Missing TARGET argument")
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 endif ()
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 if (NOT EXE_SOURCES)
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 message(FATAL_ERROR "Missing SOURCES argument")
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 endif ()
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 molko_build_assets("${EXE_ASSETS}" OUTPUTS)
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
73 if (EXE_TRANSLATIONS)
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
74 molko_build_translations(
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
75 TARGET ${EXE_TARGET}
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
76 TRANSLATIONS ${EXE_TRANSLATIONS}
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
77 SOURCES ${EXE_SOURCES}
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
78 )
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
79 endif ()
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 221
diff changeset
80
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 add_executable(${EXE_TARGET} ${EXE_SOURCES} ${OUTPUTS})
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 target_compile_definitions(${EXE_TARGET} PRIVATE ${EXE_FLAGS})
125
d59efa737fcc cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
83 target_include_directories(
d59efa737fcc cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
84 ${EXE_TARGET}
d59efa737fcc cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
85 PRIVATE
d59efa737fcc cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
86 ${CMAKE_CURRENT_BINARY_DIR}
d59efa737fcc cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
87 ${EXE_INCLUDES}
d59efa737fcc cmake: add examples and fix
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
88 )
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 target_link_libraries(
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 ${EXE_TARGET}
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 PRIVATE
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 ${EXE_LIBRARIES}
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 )
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 if (EXE_FOLDER)
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 set_target_properties(${EXE_TARGET} PROPERTIES FOLDER ${EXE_FOLDER})
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 endif ()
263
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 245
diff changeset
98 if (EXE_INSTALL)
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 245
diff changeset
99 install(TARGETS ${EXE_TARGET} DESTINATION ${CMAKE_INSTALL_BINDIR})
cd5bdb995052 cmake: create a new libmlk-data library
David Demelier <markand@malikania.fr>
parents: 245
diff changeset
100 endif ()
221
d51d9c0c2186 misc: some cleanup
David Demelier <markand@malikania.fr>
parents: 125
diff changeset
101
d51d9c0c2186 misc: some cleanup
David Demelier <markand@malikania.fr>
parents: 125
diff changeset
102 molko_set_compiler_flags(${EXE_TARGET})
242
4c24604efcab cmake: create build hierarchy similar to install, closes #2518 @1h
David Demelier <markand@malikania.fr>
parents: 241
diff changeset
103 molko_set_build_directories(${EXE_TARGET})
121
789b23e01f52 misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 endfunction()