Re: [CMake] Different CMAKE_CXX_FLAGS for different executables
On 03/25/2011 03:36 PM, David Doria wrote: >> Could you post the output of "make VERBOSE=1"? >> >> On *nix, the following CMakeLists.txt works as expected: >> The output of "make VERBOSE=1" contains: >> >>> .../c++ -DUNIX -o .../SetTargetProperties.cxx.o -c >>> .../SetTargetProperties.cxx > > It is working properly now. I must not have done a 'make clean'. > >> BTW, preprocessor definitions like "-DUNIX" should be set via the >> COMPILE_DEFINITIONS properties instead of the COMPILE_FLAGS ones. > > It seems to generate exactly the same thing if I use > > set_target_properties(CompilerFlags PROPERTIES COMPILE_FLAGS "-DUNIX") > > and > > set_target_properties(CompilerFlags PROPERTIES COMPILE_DEFINITIONS "UNIX") > > After reading the documentation you set certainly sounds like I should > use the COMPILE_DEFINITIONS version, but is there a difference? > > Thanks again, > > David For simple defines, i.e. without "=" sign, COMPILE_FLAGS with "-D" and COMPILE_DEFINITIONS without "-D" should act equivalently. However, the latter cares about the correct escaping for more complex definitions, i.e. -DXYZ=\"...\" and the like. Furthermore, COMPILE_DEFINITIONS has configuration-specific variants and is also available as a directory property. Finally, it is list-oriented while COMPILE_FLAGS is space- separated. Thus, COMPILE_DEFINITIONS is preferable for preprocessor definitions while COMPILE_FLAGS should be reserved for non-define flags - as long as it doesn't become obsolete anyway due to the envisaged COMPILE_OPTIONS property [1]. Regards, Michael [1] http://public.kitware.com/Bug/view.php?id=6493#c13821 ___ 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
Re: [CMake] Different CMAKE_CXX_FLAGS for different executables
> Could you post the output of "make VERBOSE=1"? > > On *nix, the following CMakeLists.txt works as expected: > The output of "make VERBOSE=1" contains: > >> .../c++ -DUNIX -o .../SetTargetProperties.cxx.o -c >> .../SetTargetProperties.cxx It is working properly now. I must not have done a 'make clean'. > BTW, preprocessor definitions like "-DUNIX" should be set via the > COMPILE_DEFINITIONS properties instead of the COMPILE_FLAGS ones. It seems to generate exactly the same thing if I use set_target_properties(CompilerFlags PROPERTIES COMPILE_FLAGS "-DUNIX") and set_target_properties(CompilerFlags PROPERTIES COMPILE_DEFINITIONS "UNIX") After reading the documentation you set certainly sounds like I should use the COMPILE_DEFINITIONS version, but is there a difference? Thanks again, David ___ 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
Re: [CMake] Different CMAKE_CXX_FLAGS for different executables
On 03/24/2011 11:39 PM, David Doria wrote: > On Thu, Mar 24, 2011 at 11:31 AM, Yuri Timenkov wrote: >> Use COMPILE_FLAGS target property. Like this: >> >> set_target_properties(Exec2 PROPERTIES COMPILE_FLAGS "/flag1 /flag2") >> >> You can see full list of properties in CMake documentation. Note that >> compiler flags may be also set for particular source file with >> set_source_files_properties command. > > Hi Yuri, > > I tried a CMakeLists.txt file like this: > > cmake_minimum_required(VERSION 2.6) > PROJECT(SetTargetProperties) > ADD_EXECUTABLE(SetTargetProperties SetTargetProperties.cxx) > set_target_properties(SetTargetProperties PROPERTIES COMPILE_FLAGS "-DUNIX") > > Then I ran: > > make VERBOSE=1 > > and I don't see anything in the output that indicates that this flag > was passed, but I also don't see the call to g++ at all. How would I > check that this worked correctly? Could you post the output of "make VERBOSE=1"? On *nix, the following CMakeLists.txt works as expected: cmake_minimum_required(VERSION 2.6) PROJECT(SetTargetProperties) FILE(WRITE ${CMAKE_BINARY_DIR}/SetTargetProperties.cxx "int main(){return 0;}\n") ADD_EXECUTABLE(SetTargetProperties SetTargetProperties.cxx) set_target_properties(SetTargetProperties PROPERTIES COMPILE_FLAGS "-DUNIX") The output of "make VERBOSE=1" contains: > .../c++ -DUNIX -o .../SetTargetProperties.cxx.o -c .../SetTargetProperties.cxx BTW, preprocessor definitions like "-DUNIX" should be set via the COMPILE_DEFINITIONS properties instead of the COMPILE_FLAGS ones. Regards, Michael ___ 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
Re: [CMake] Different CMAKE_CXX_FLAGS for different executables
On 03/24/2011 03:44 PM, David Doria wrote: > Is there a way to explicitly set the CMAKE_CXX_FLAGS for a particular > executable? That is, if I set CMAKE_CXX_FLAGS and then have a > add_executable line, then change CMAKE_CXX_FLAGS and then have another > add_executable, will the first set of CMAKE_CXX_FLAGS be applied to > the first executable and the second set of CMAKE_CXX_FLAGS be applied > to the second executable? AFAIK, CMAKE_CXX_FLAGS et al. are special in as much as the last value they receive within a CMakeLists.txt file is effective for all targets defined in that file, i.e. they undergo a kind of lazy evaluation. So, the answer to your question is: No, you can't specify CMAKE_CXX_FLAGS individually for targets within the same CMakeLists.txt, but you can specify them per directory, i.e. individually in each CMakeLists.txt. Nevertheless, CMAKE_CXX_FLAGS should be considered as project-wide settings, IMO. > I guess my confusion is that I don't understand how CMake variables are > cached. > > Each time I modify the variable, should I do it using > > SET(CMAKE_CXX_FLAGS "some flags") > > or > > SET(CMAKE_CXX_FLAGS "some flags" CACHE STRING "compiler flags") > > ? See [1] for a consideration of SET() w.r.t. the cache and scopes. > In this example: http://codepad.org/PGJRBjss [...] ATM, that site seems to be offline. Could you post the example here? Regards, Michael [1] http://www.mail-archive.com/cmake@cmake.org/msg29869.html et seq. ___ 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
Re: [CMake] Different CMAKE_CXX_FLAGS for different executables
On Thu, Mar 24, 2011 at 11:31 AM, Yuri Timenkov wrote: > Use COMPILE_FLAGS target property. Like this: > > set_target_properties(Exec2 PROPERTIES COMPILE_FLAGS "/flag1 /flag2") > > You can see full list of properties in CMake documentation. Note that > compiler flags may be also set for particular source file with > set_source_files_properties command. Hi Yuri, I tried a CMakeLists.txt file like this: cmake_minimum_required(VERSION 2.6) PROJECT(SetTargetProperties) ADD_EXECUTABLE(SetTargetProperties SetTargetProperties.cxx) set_target_properties(SetTargetProperties PROPERTIES COMPILE_FLAGS "-DUNIX") Then I ran: make VERBOSE=1 and I don't see anything in the output that indicates that this flag was passed, but I also don't see the call to g++ at all. How would I check that this worked correctly? Thanks for your help so far, David ___ 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
Re: [CMake] Different CMAKE_CXX_FLAGS for different executables
Use COMPILE_FLAGS target property. Like this: set_target_properties(Exec2 PROPERTIES COMPILE_FLAGS "/flag1 /flag2") You can see full list of properties in CMake documentation. Note that compiler flags may be also set for particular source file with set_source_files_properties command. On Thu, Mar 24, 2011 at 5:44 PM, David Doria wrote: > Is there a way to explicitly set the CMAKE_CXX_FLAGS for a particular > executable? That is, if I set CMAKE_CXX_FLAGS and then have a > add_executable line, then change CMAKE_CXX_FLAGS and then have another > add_executable, will the first set of CMAKE_CXX_FLAGS be applied to > the first executable and the second set of CMAKE_CXX_FLAGS be applied > to the second executable? > > I guess my confusion is that I don't understand how CMake variables are > cached. > > Each time I modify the variable, should I do it using > > SET(CMAKE_CXX_FLAGS "some flags") > > or > > SET(CMAKE_CXX_FLAGS "some flags" CACHE STRING "compiler flags") > > ? > > In this example: http://codepad.org/PGJRBjss the messages are actually > not displayed at all, which is only adding to my confusion :) > > Any comments on this? > > Thanks, > > David > ___ > 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 > ___ 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
Re: [CMake] Different CMAKE_CXX_FLAGS for different executables
On Thu, Mar 24, 2011 at 10:44 AM, David Doria wrote: > Is there a way to explicitly set the CMAKE_CXX_FLAGS for a particular > executable? That is, if I set CMAKE_CXX_FLAGS and then have a > add_executable line, then change CMAKE_CXX_FLAGS and then have another > add_executable, will the first set of CMAKE_CXX_FLAGS be applied to > the first executable and the second set of CMAKE_CXX_FLAGS be applied > to the second executable? > > I guess my confusion is that I don't understand how CMake variables are > cached. > > Each time I modify the variable, should I do it using > > SET(CMAKE_CXX_FLAGS "some flags") > > or > > SET(CMAKE_CXX_FLAGS "some flags" CACHE STRING "compiler flags") > > ? > > In this example: http://codepad.org/PGJRBjss the messages are actually > not displayed at all, which is only adding to my confusion :) > > Any comments on this? > > Thanks, > > David > Scratch that last part, I was looking in the wrong place in my IDE. The output is: Using flags Using flags when I would expect: Using flags Flags1 Using flags Flags2 Can anyone explain this? David ___ 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