CMake uses semi-colon as path separator on Linux

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

CMake uses semi-colon as path separator on Linux

Pawel Veselov
Hello.

I really can't understand what's going on. Trying to compile my project
for android, setting all kinds of things to get it done. I've tried 3.8.0,
3.7.2 and 3.6.2, with the same result. The below extracts are from running
3.6.2

Running with --debug and --trace, I see:

/usr/share/cmake/Modules/FindPkgConfig.cmake(91):
_pkgconfig_set(JSONC_CFLAGS ${_pkgconfig_invoke_result} )
/usr/share/cmake/Modules/FindPkgConfig.cmake(64):  set(JSONC_CFLAGS
-I/tmp/arm-23/include/json-c;-I/tmp/arm-23/include CACHE INTERNAL  )

I ran strace, and I can see pkg-config returning paths normally, just spaces.

Running make on the generated makefiles:

/tmp/arm-23/bin/arm-linux-androideabi-gcc    -g -ggdb -O0 --std=c99
-isystem/home/vps/ws/EF/DMClient/android_src/http-parser
-isystem/usr/include
-isystem/home/vps/ws/EF/DMClient/android_src/wslay/lib/includes
-I/tmp/arm-23/include/json-c;-I/tmp/arm-23/include -isystem
/tmp/arm-23/include -isystem /tmp/arm-23/include/libxml2   -o
CMakeFiles/dmclient.dir/config.c.o   -c
/home/vps/ws/EF/DMClient/config.c

The semicolons are in the ./CMakeFiles/node_editor.dir/flags.make

The CMakeLists.txt has this line:
pkg_check_modules(JSONC REQUIRED json-c openssl)

At this point, I'm running CMake without any fancy command, the compiler
location and such are derived from environment variables.

I tried using the NDK flags (with 3.8, and using toolchain), but then
realized this reproduces even without them (and on 3.6)

Any idea what drags in those semicolons?

Thank you.
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake uses semi-colon as path separator on Linux

Nils Gladitz-2
On 14.04.2017 06:05, Pawel Veselov wrote:

> Hello.
>
> I really can't understand what's going on. Trying to compile my project
> for android, setting all kinds of things to get it done. I've tried 3.8.0,
> 3.7.2 and 3.6.2, with the same result. The below extracts are from running
> 3.6.2
>
> Running with --debug and --trace, I see:
>
> /usr/share/cmake/Modules/FindPkgConfig.cmake(91):
> _pkgconfig_set(JSONC_CFLAGS ${_pkgconfig_invoke_result} )
> /usr/share/cmake/Modules/FindPkgConfig.cmake(64):  set(JSONC_CFLAGS
> -I/tmp/arm-23/include/json-c;-I/tmp/arm-23/include CACHE INTERNAL  )
>
> I ran strace, and I can see pkg-config returning paths normally, just spaces.
>
> Running make on the generated makefiles:
>
> /tmp/arm-23/bin/arm-linux-androideabi-gcc    -g -ggdb -O0 --std=c99
> -isystem/home/vps/ws/EF/DMClient/android_src/http-parser
> -isystem/usr/include
> -isystem/home/vps/ws/EF/DMClient/android_src/wslay/lib/includes
> -I/tmp/arm-23/include/json-c;-I/tmp/arm-23/include -isystem
> /tmp/arm-23/include -isystem /tmp/arm-23/include/libxml2   -o
> CMakeFiles/dmclient.dir/config.c.o   -c
> /home/vps/ws/EF/DMClient/config.c
>
> The semicolons are in the ./CMakeFiles/node_editor.dir/flags.make
>
> The CMakeLists.txt has this line:
> pkg_check_modules(JSONC REQUIRED json-c openssl)
>
> At this point, I'm running CMake without any fancy command, the compiler
> location and such are derived from environment variables.
>
> I tried using the NDK flags (with 3.8, and using toolchain), but then
> realized this reproduces even without them (and on 3.6)
>
> Any idea what drags in those semicolons?

CMake uses semicolons to separate list elements:
https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#lists

Some CMake commands / variables / properties expect ";"-separated lists
(e.g. target_compile_options(), COMPILE_OPTIONS) and some expect strings
with whitespace separated arguments (e.g. CMAKE_C_FLAGS, COMPILE_FLAGS).

Presumably you are feeding the list to something that expects the latter.

Nils
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake
Loading...