Am Donnerstag 07 Mai 2009 18:15:40 schrieb Thomas Kindler: > Hendrik Sattler wrote: > > Zitat von Thomas Kindler <mail+cm...@t-kindler.de>: > >> cmake tries to use cygwin-style absolute "/home/tkindler.." paths, > >> which arm-none-eabi-gcc doesn't seem to like (being a native win32 > >> program). > >> > >> My old makefile used relative paths to invoke the compiler. How can I > >> do this in cmake generated makefiles?! > >> > >> Prepending "c:/cygwin/" to all paths should also solve the problem. > > > > If you have a native compiler, use the native compiled cmake. If you > > have a compiler/tool that depends on cygwin, use the cygwin-compiled > > cmake. Living in both worlds (native vs. cygwin) is a major pain. Just > > don't. > > Ok.. that part seems to work after installing the native windows cmake. > > The resulting binary is still not usable -- cmake inserts an "-fPIC" > linker flag. > > arm-none-eabi-gcc.exe -fPIC $(stm32test_OBJECTS) [..] > > How can I switch that off?
$ cmake --help-property ENABLE_EXPORTS [...] ENABLE_EXPORTS Specify whether an executable exports symbols for loadable modules. Normally an executable does not export any symbols because it is the final program. It is possible for an executable to export symbols to be used by loadable modules. When this property is set to true CMake will allow other targets to "link" to the executable with the TARGET_LINK_LIBRARIES command. On all platforms a target-level dependency on the executable is created for targets that link to it. For non-DLL platforms the link rule is simply ignored since the dynamic loader will automatically bind symbols when the module is loaded. For DLL platforms an import library will be created for the exported symbols and then used for linking. All Windows-based systems including Cygwin are DLL platforms. I guess that the default is true, contrary to the help message. I think this is a bug. Setting it to false should get rid of the -fPIC, maybe. > I also need to specify a special linker script for my target. In my > plain old makefile I just added -Tstm32f10x.ld to my linker command line. Use the LINK_FLAGS/LINK_FLAGS_<CONFIG> target properties. Or actually better, this obviously belongs to the toolchain file. Try SET ( CMAKE_EXE_LINKER_FLAGS_INIT -T/an/absolute/path/to/stm32f10x.ld ) And yes, the path must be absolute. > What's the official cmake way to add custom linker flags?! > > Adding it to target_link_libraries( .. ) seems to work, but feels wrong. > > Also: Right now, I have to invoke cmake by this lengthy command: > > cmake -DCMAKE_TOOLCHAIN_FILE=CodeSourcery.cmake -G"Unix Makefiles" . > > when compiling the project for the first time. How can I specify a > default toolchain and generator in the CMakeLists.txt itself? No. But you can write a small batch file and give it a good name. Good old methods never die. HS _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake