10

I have the following CMake structure:

CMakelists.txt toolchain.cmake folder1 ----CMakelists.txt folder2 ----CMakelists.txt etc.. 

My first-level CMakelists.txt file includes the other subdirectories. Now I want to build my code for a different target.

The manual way is:

1. mkdir hostBuild cd hostBuild cmake .. make 2. mkdir crossBuild cd crossBuild cmake .. --DCMAKE_TOOLCHAIN_FILE=toolchain.cmake make 

Is it possible that this process can run automatically?

For example, I just have to run cmake . at my first level.

Is something like this is possible?

1 Answer 1

10

No. The recommendation would be to just put your manual steps into a shell script.

CMake can only handle one compiler/make environment at a time (if you switch the compiler you need a different binary output directory).

Especially a toolchain file that does contain SET(CMAKE_SYSTEM_NAME ...) does change the whole outcome of the configuration/generation process.

For details on what CMake does see: CMake: In which Order are Files parsed (Cache, Toolchain, …)?

And you could make use of some CMake command line options in your shell script:

if [ ! -d hostBuild ]; then cmake -E make_directory hostBuild cmake -E chdir hostBuild cmake .. fi cmake --build hostBuild ... 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.